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 em 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 de aplicativos, substituindo muitos arquivos de configuração. Mais importante, a configuração do Windows foi armazenada no mesmo lugar.
O registro ficou inchado devido a aplicativos que não estavam limpando depois de si mesmos. O inferno da DLL aconteceu como resultado de várias versões das mesmas bibliotecas compartilhadas que se sobrescreveram.
O .NET introduziu o conceito de app.config (quase dois arquivos ini marca 2, desta vez com um pouco mais de estrutura, poupando os desenvolvedores perdendo tempo escrevendo analisadores manuais). O GAC foi introduzido em assemblies compartilhados de versão na tentativa de impedir o Inferno da DLL.
No Windows XP e no Vista, a Microsoft tentou definir o espaço do usuário como um local para armazenar dados do usuário e arquivos de configuração em um único local padrão para permitir perfis móveis e fácil migração (apenas copie seu perfil) com os aplicativos instalados em arquivos de programas.
Então, eu acho que a razão é que "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 xcopying em um único local .
.. e isso antes de configurar contas de usuário, configurar e garantir permissões de segurança, baixar atualizações e instalar serviços do Windows ...
xcopy é o "caso simples" e certamente não é o melhor para tudo.