Você está basicamente certo: os locais do usuário e do ambiente do computador. Se você criar valores do tipo REG_SZ, o Windows recusará "expandir" outras variáveis de ambiente que você possa referenciar nelas (ex. "FOO"="% OTHER_VAR% \ bar", pois um REG_SZ criará uma variável de ambiente FOO com a string literal "% OTHER_VAR% \ bar "como seu valor). Criar valores como o tipo REG_EXPAND fará com que o Windows expanda as variáveis. É um comportamento peculiar porque os tipos REG_EXPAND não são realmente "expandidos" pelas APIs de registro.
"CurrentControlSet" é um link simbólico para a instância do ControlSetXXX que está sendo usada. Se você inicializar com um perfil de hardware diferente, obterá um "CurrentControlSet" diferente. Este mecanismo pode ser pensado de forma semelhante a diferentes runlevels em um inittab se você estiver familiarizado com o SYSV * nix.
Para demonstrar que "CurrentControlSet" é realmente um link simbólico basta criar uma nova chave em "HKLM \ System \ CurrentControlSet" e ir procurá-lo em "... \ ControlSet001". Você vai encontrar lá.
Finalmente, o que você quer fazer com o complemento da variável PATH não funcionará. Você não pode ter vários valores de registro na mesma chave com o mesmo nome. Se você criar um valor chamado "PATH", não haverá "% PATH%" para o novo "PATH" expandir. Acrescentar ao PATH é uma falha real de como o caminho é armazenado no registro. Você terá que anexar uma string ao valor "PATH" e, se desejar a desinstalação, precisará analisar a variável "PATH" para recuar quando o usuário desinstala.