am I going down an inherintly bad path
Acho que no seu segundo exemplo (as subclasses de trabalhadores) você definitivamente é. Você mapeou cada subclasse para um estado específico na superclasse. Portanto, agora, toda vez que você desejar adicionar um estado à superclasse, será necessário fazer uma alteração em três locais (adicionar estado à superclasse, adicionar uma nova subclasse e alterar o construtor da classe derivada para adicionar a subclasse à lista )
O uso de classes aninhadas para acessar membros particulares parece ser um uso válido (nunca o fiz pessoalmente), mas seu caso específico não funciona aqui.
Quanto ao exemplo da parte do corpo. Como todas as classes aninhadas são públicas, você não está fazendo muito, exceto o namespace. Se essas classes crescerem para incluir mais funcionalidades, você poderá descobrir que as classes aninhadas apenas confundem as interfaces e você está vasculhando o código para encontrar algo específico. Percebo também que, como você aninhou classes, é forçado a quebrar as convenções de nomenclatura e nomear suas classes com letras minúsculas (talvez essa tenha sido uma opção). Mas esses argumentos são mais superficiais do que qualquer coisa realmente errada.
A menos, é claro, que você precise implementar um braço sem corpo. Em seguida, criar um braço, fazendo o seguinte, é confuso, porque não há corpo / torso / lado. (Observe também a caixa confusa).
arm newArm = new Body.torso.side.arm("");