So besides adding the code for getting screws, I had to modify 4 lines. This would increase linearly with the amount of layers.
Eu acho que isso é uma falácia. Quando você adiciona outro tipo de parte da tabela, você ainda terá apenas que alterar 4 linhas de código na sua "camada de construção do objeto". As camadas acima da camada "construção de objeto" em seu código funcionarão apenas com objetos "de tabela", sem modificações, contanto que não tenham que lidar com o novo tipo de peça. Você pode passar esse objeto de tabela através de um número arbitrário de camadas e não precisa alterar nada. E quando você encontra uma parte em seu código onde você tem que acessar seus parafusos, esse código pode simplesmente pedir o "objeto de tabela" para os parafusos.
É claro, quando o próprio processo de construção de objeto se torna mais complicado, e você pensa que tem "muita informação" lá, você pode considerar criar uma classe de fábrica (de tabela) para encapsular as construções. Dessa forma, é possível criar "parafusos", "pernas" e "placa" em um lugar, armazená-los em variáveis de membro da fábrica e obtê-los posteriormente na função "montar".
Portanto, enquanto o processo de construção for simples, atenha-se ao design e, se ficar mais complicado, use as classes de fábrica.