Hola.
Yo tampoco estoy seguro del por qué (con los ficheros sí), pero pensándolo, he llegado a unas pocas conclusiones de los efectos perjudiciales que puede tener esa práctica:
1) La conexión queda abierta, lo que significa que al menos uno de los hilos del pool de conexiones de la base de datos no será liberado. Si restringes el número de conexiones máximas a, por ejemplo, 100, es posible que en determinados momentos el servicio se vea interrumpido por exceder el número máximo de usuarios de forma ficticia.
2) El número de puertos disponibles de la máquina se reduce, ya que algunos de ellos permanecen escuchando conexiones muertas. Esto puede llevar también a la situación del primer punto, en caso de que el servidor reciba muchas peticiones.
3) Ésta está más basada en la práctica. Para realizar ciertas operaciones de mantenimiento sobre la base de datos, es necesario que no haya conexiones activas. De lo contrario, el SGBD te dará algún tipo de error cuando intentes ejecutar algunas acciones.
4) Me parece recordar que en una ocasión, en Java, se me olvidó cerrar un statement. El efecto colateral que produjo fue que el programa no era capaz de reutilizar la conexión para ejecutar otras consultas.
Espero haber podido orientarte a pesar de no tener demasiada idea.