Geralmente, quando você instala um novo software, uma dll (arquivo) usada por muitos outros pacotes de software precisa ser atualizada para uma nova versão. (É muito mais provável que isso aconteça ao atualizar um aplicativo que você já instalou.)
Se a dll estiver sendo usada por um aplicativo em execução, parte dela será carregada na memória e o restante será lido do disco quando for necessário. Portanto, a dll será bloqueada no disco. (Pense nos problemas se não estiver trancado!)
Uma DLL bloqueada não pode ser atualizada, portanto, o instalador pedirá ao windows para substituir a DLL pela nova versão na próxima vez que a máquina for reiniciada. Daí a necessidade de um reinício.
Alguns instaladores melhores informam os aplicativos que devem ser encerrados antes de executar o instalador, permitindo que a DLL seja atualizada sem reiniciar. No entanto, isso torna a interface do usuário do instalador mais complexa e leva a mais chamadas de suporte.
Um instalador de um aplicativo também pode fazer o aplicativo salvar seu estado, desligá-lo e reinicializá-lo depois que a DLL for atualizada. Isso só pode ser feito se a DLL for usada por um único aplicativo. A maioria dos aplicativos de atualização automática faz isso - essa deve ser a norma para aplicativos de mercado de massa quando há muitos usuários.
Todos os itens acima podem levar a uma lógica complexa que é difícil de testar. Os instaladores de teste demoram muito tempo, pois você precisa tentar adivinhar cada estado em que a máquina de um usuário pode estar. Por isso, geralmente é melhor que um instalador seja simples e funcione sempre, mesmo que leve a mais algumas reinicializações para o usuário. .
Não é sempre que um usuário decide comprar um aplicativo diferente devido à reinicialização do instalador, portanto, o vendedor gasta o tempo (dinheiro) trabalhando no que é necessário para fazer com que o usuário compre seus aplicativos.
Com que frequência você teve um problema depois de instalar um aplicativo que se classificou quando você fez uma reinicialização? Pense nos custos de suporte de muitos usuários que estão resolvendo problemas resolvidos apenas com a reinicialização. Ele pode rapidamente tornar-se muito tentador como desenvolvedor para sempre fazer com que o usuário faça uma reinicialização após instalar seu software, mesmo quando você acha que não é necessário.
----------
A maioria dos sistemas operacionais e softwares foram escritos nos dias em que o espaço em disco e a memória custam um lote de dinheiro. Agora existe um movimento para que os aplicativos tenham uma cópia privada de todas as DLLs que usam, portanto, fazendo upgrade de borracha, mas usando mais espaço de armazenamento.
Nos servidores isso está sendo feito com "containers", no entanto, "containers" não funcionam bem para software de desktop, já que você deseja poder acessar os dados salvos por um aplicativo com outra aplicação. (Caso contrário, basta usar um iPhone.)