Porque é impossível.
O registro tem vários nós raiz, mas apenas dois interessantes: LocalMachine e CurrentUser . Normalmente, a configuração grava valores em LocalMachine e o programa em execução SOMENTE grava em CurrentUser (na verdade, a menos que a instalação mexe com as permissões, o programa em execução não pode gravar em LocalMachine.)
Embora manter as sobras no LocalMachine seja preguiça, como apontado pelas outras respostas, não é possível limpar a parte do Usuário.
Se um programa é instalado por máquina (o que a maioria é) e vários usuários o usam, o que o desinstalador deve fazer? 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ê iniciar o desinstalador a partir de uma conta não admin e depois inserir as credenciais de uma conta de administrador - a configuração agora está sendo executada nessa conta, não na primeira).
E os outros usuários? Ele poderia tentar enumerar todos os usuários, mas suas chaves de registro podem não ser carregadas. (O Windows é preguiçoso e só carrega as coisas de que precisa.)
Mas você nem deveria tentar isso. Se você usar perfis móveis, por exemplo, para serviços de terminal e, em seguida, excluir todas as configurações durante a desinstalação, poderá realmente confundir e excluir itens que ainda estejam em uso.
Um servidor de terminal é basicamente uma máquina do Windows na qual vários usuários fazem login ao mesmo tempo e usam aplicativos.
Digamos que você tenha dois servidores de terminal executando um aplicativo. Você desinstalar o aplicativo no TS1, agora todas as configurações para todos os usuários se foram no TS2 porque você tem perfis de roaming. oops.
O mesmo se aplica aos arquivos nos diretórios por usuário.
Na configuração do programa das minhas empresas, eu apago o material por máquina, mas não toco no material por usuário, nem mesmo no usuário que está executando a configuração.