DAO é necessário com JPA?

Não existe “o correto”, se no final das contas seu objetivo for alcançado.
Pense em “motivação”, esta é a palavra-chave para todo e qualquer padrão de projeto. Se existir no seu projeto algum problema que se encaixe na descrição de motivação de alguma padrão, use-o, caso contrário, não.

Você pode por exemplo querer abstrair seu Entity Manager, Session do Hibernate ou até mesmo Connection de um JDBC, mas não se esqueça que nada disso tem valor se você expor seu critério de consulta para estas APIs, como um JPAQL, HQL, Criteria ou SQL. Neste caso você também teria que usar Specification+QueryObjects para conseguir este nível de abstração.

Como pode ver, isso pode ser um problema ao invéz de ser uma solução, caso você saiba que não vai mudar sua API de persistencia. Por causa disso muita gente prefere não sujar os objetos de domínio e expor apenas uma interface de repositorio para este, e aplicar direto na implementação deste cara um Entity Manager da vida. O principal, que é isolar o negócio foi feito, o resto é perfumaria.