Ficou claro que a cerquilha # torna inacessível por fora da classe o dado. Mas se criarmos uma função por dentro que permite o acesso por fora da classe por meio desta função, isso não é redundante? Não seria mais fácil então permanecer com a convenção do anderline (_) ? Pelo menos se o acesso por fora da classe tornasse claro que o atributo é privado, por exemplo, se as funções de get ou set do dado pudessem ser chamadas por fora da classe com o # como prefixo, para assim ao bater o olho sabermos que se trata de um dado sensível....
Algo que me deixou ainda mais em dúvida foram os getters e os setters, que permitem que por fora o acesso tanto para pegar quanto para editar é identico aos dados que não são privados, parece uma forma mais difícil, que usam mais linhas pra fazer a mesma coisa!
Creio que esta implementação do ESM foi muito bem pensada para atender melhor nós desenvolvedores, então já parto do pressuposto que tem alguma falha no meu raciocínio que explicaria a minha dúvida, posto aqui na esperança que alguém me responda :)