Thilo adicionou uma boa resposta para sua primeira pergunta "Como isso é possível?". Desejo elaborar um pouco sobre a segunda pergunta: por que esse comportamento é permitido?
Para iniciantes, vamos deixar perfeitamente claro que esse comportamento não se limita às classes internas, que por definição são tipos aninhados não estáticos. Esse comportamento é permitido para todos os tipos aninhados, incluindo enumerações e interfaces aninhadas, que devem ser estáticas e não podem ter uma instância anexa. Basicamente, o modelo é uma simplificação da seguinte declaração: Código aninhado tem acesso total ao código anexo - e vice-versa.
Então porque? Eu acho que um exemplo ilustra melhor o ponto.
Pense no seu corpo e no seu cérebro. Se você injetar heroína em seu braço, seu cérebro fica alto. Se a região da amígdala do seu cérebro vir o que ele acredita ser uma ameaça à sua segurança pessoal, digamos uma vespa, por exemplo, ele fará seu corpo se virar e correr para as colinas sem você "pensar" duas vezes.
Assim, o cérebro é uma parte intrínseca do corpo - e estranhamente, o contrário também. O uso do controle de acesso entre essas entidades estreitamente relacionadas perde a reivindicação de relacionamento. Se você precisar de controle de acesso, precisará separar as classes mais em unidades verdadeiramente distintas. Até então, eles são a mesma unidade. Um exemplo de direção para estudos adicionais seria examinar como um Java Iterator
geralmente é implementado.
O acesso ilimitado do código anexo ao código aninhado torna, na maioria das vezes, inútil adicionar modificadores de acesso aos campos e métodos de um tipo aninhado. Isso aumenta a confusão e pode fornecer uma falsa sensação de segurança para os novatos da linguagem de programação Java.