どうして Dagger を利用するのか、同じことは setter を実装して外部から利用するインスタンスを変更することで実現できるのではないのか?
結論から言うと Dagger を利用した依存性の解決(注入)を実現することが楽だからです。
そもそも、広い意味での DI の実現方法には setter を利用した DI が存在します。setter injection と言うそうです。
以前の勉強会のコード を setter injection を利用して実装すると、だいたい次のようになると思います。