Olá!
Existem 2 grandes motivos para isto, vou tentar explicar:
1) A conexão deve ser passada por uma questão de performance e reuso de objetos. É muito custoso/demorado abrirmos uma nova conexão a cada iteração que fizermos no banco de dados. Imagine que cada vez que você cria a conexão, sua classe Java precisa se comunicar com a JVM através do Driver do banco de dados, a JVM por sua vez conversa com o Sistema Operacional, o Sistema Operacional conversa com a rede (caso o banco de dados não esteja na mesma maquina por exemplo) e assim sucessivamente.
Além disto também é necessário todo o processo de autenticação no banco de dados a cada nova abertura de conexão, quando você passa a conexão pronta para o DAO, tudo isto já está pronto.
Quando criamos uma conexão antecipadamente, já deixamos tudo pronto para nossa DAO poder utilizar e economizamos muito tempo com o "reuso" deste objeto (neste caso, o objeto conexão).
2) O segundo beneficio é que, você pode utilizar uma mesma conexão com vários DAOs, imagine que você precise atualizar 2 ou mais tabelas ao mesmo tempo, porem se ocorrer um erro, você precisa desfazer todas as alterações (rollback). Quando você passa a conexão para o DAO, ele deixa de ser o "unico" dono deste objeto e passa a compartilhar a conexão entre varios DAOs, permitendo assim que você consiga executar um commit ou rollback em toda a transação do banco de dados.
Espero ter conseguido explicar bem!
Bons estudos!
Um abraço!