A questão é que com o Pool, você usa o idioma de abrir e fechar por consulta, mas o pool evita a abertura e fechamento, reusando uma conexão. Fechar uma conection é uma operação que passa a ser substituída por “devolver ao pool”.
Na prática, numa aplicação bem feita, você acaba com uma conexão aberta o tempo todo do mesmo jeito. A vantagem é que ele pode matar a conexão mais rapidamente caso o usuário deixe o sistema aberto e se recuperar caso o banco caia.
E outro detalhe é que ele é ridiculamente fácil de configurar, ao ponto de você ter que pensar três ou quatro vezes se não quer mesmo usa-lo. É quase tão fácil quanto escrever sua classe Singleton.