Porque é impossível.
O registro possui vários nós raiz, mas apenas dois interessantes: LocalMachine e CurrentUser . Normalmente, a instalação grava valores no LocalMachine e o programa em execução APENAS grava no CurrentUser (na verdade, a menos que a instalação altere as permissões, o programa em execução não pode gravar no LocalMachine.)
Embora guardar sobras no LocalMachine seja preguiçoso, como apontado pelas outras respostas, não é possível limpar a parte do Usuário.
Se um programa é instalado por máquina (qual a maioria) e vários usuários o utilizam, o que o desinstalador deve fazer? Ele pode remover com segurança as configurações de usuário da conta atual, mas a conta atual pode não ser sua conta. (Isso acontece se você iniciou o desinstalador a partir de uma conta não administrativa e inseriu as credenciais de uma conta administrativa - a configuração agora está sendo executada nessa conta, e não na primeira).
E os outros usuários? Ele pode tentar enumerar todos os usuários, mas suas chaves do Registro podem não estar carregadas. (O Windows é preguiçoso e carrega apenas o necessário.)
Mas você nem deveria tentar isso. Se você usar perfis de roaming, por exemplo, para serviços de terminal e excluir todas as configurações na desinstalação, poderá realmente atrapalhar e excluir as coisas que ainda estão em uso.
Um servidor de terminal é basicamente uma máquina Windows em que vários usuários efetuam login ao mesmo tempo e usam aplicativos.
Digamos que você tenha dois servidores de terminal executando um aplicativo. Você desinstala o aplicativo no TS1, agora todas as configurações para todos os usuários desaparecem no TS2 porque você possui perfis móveis. oops.
O mesmo se aplica aos arquivos nos diretórios por usuário.
Na configuração do programa de minha empresa, excluo as coisas por máquina, mas não toco nas coisas por usuário, nem mesmo no usuário que está executando a instalação.