Não há nenhuma "bala mágica" que possa lidar com esse tipo de coisa para você. Eu ficaria cético em relação a quem disser que existe.
Eu venho de um histórico de usar scripts de construção verificados em um VCS, então meu viés provavelmente vai aparecer aqui.
Vou abordar alguns itens que outros mencionaram:
O Windows Installer certamente parece atraente à primeira vista, mas não é um "almoço grátis". Se você optar por criar os pacotes do Windows Installer, você só precisará encapsular as dependências e a lógica do seu script no pacote do instalador, possivelmente com muita fealdade, como grandes quantidades de ações personalizadas. Com efeito, você estaria usando o Windows Installer como um ambiente de script com várias peculiaridades e limitações internas.
Se você usar um sistema de gerenciamento de configuração (Configuração de Estado Desejado, Marionete, etc), você ainda precisará modelar as dependências e a lógica. Com um sistema de gerenciamento de configuração, ouso dizer que você vai se deparar com os limites da capacidade da plataforma de descrever suas dependências, e nesse ponto você precisará complementar com scripts de qualquer maneira.
Eu acho que você começou o caminho certo com o seu script Powershell. Gostaria de comentar o heck fora do script e eu trabalharia muito para construir um único script (ou, mais provavelmente, um conjunto de scripts menores que são chamados a partir de um único script central) que pode Lidar com todos os seus vários cenários de instalação. Eu usaria o software de controle de versão para manter esses scripts. Na medida em que seja viável para os produtos que você está instalando a partir de blobs binários opacos, eu criaria uma lógica de teste para validar se esses instaladores estão realmente funcionando.