Os instaladores são o resultado de anos de evolução e um pouco da história (simplificada) ajuda a entender por que eles fazem o que fazem.
O modelo do Windows 3.1 sugeriu arquivos de configuração no estilo config.ini por aplicativo, com suporte a bibliotecas compartilhadas que entram nas pastas do sistema para evitar duplicação e desperdício de espaço em disco.
O Windows 95 introduziu o registro, permitindo um armazenamento central para a configuração do aplicativo, substituindo muitos arquivos de configuração. Mais importante, a configuração do Windows foi armazenada no mesmo local.
O registro ficou inchado devido a aplicativos que não foram limpos após eles mesmos. O inferno da DLL aconteceu como resultado de várias versões das mesmas bibliotecas compartilhadas se substituindo.
O .NET introduziu o conceito de app.config (arquivos quase ini marcam 2, desta vez com um pouco mais de estrutura, economizando tempo para os desenvolvedores perdendo tempo escrevendo analisadores manuais). O GAC foi apresentado aos assemblies compartilhados de versão na tentativa de impedir o DLL Hell.
No Windows XP e mais no Vista, a Microsoft tentou definir o espaço do usuário como um local para armazenar dados e arquivos de configuração do usuário em um único local padrão para permitir perfis móveis e fácil migração (basta copiar seu perfil) com os aplicativos instalados em Arquivos de Programas .
Então, acho que o motivo é que "os aplicativos no Windows são projetados para viver em um lugar, suas dependências compartilhadas em outro e os dados específicos do usuário em outro", o que praticamente funciona contra o conceito de copiar um único local para xcopying.
.. e isso antes de você ter que configurar contas de usuário, configurar e garantir permissões de segurança, baixar atualizações e instalar serviços do Windows ...
O xcopy é o "caso simples" e certamente não é o melhor para tudo.