Sobre la función que ya tienes basada en API y no en TRegistry, vamos a enumerar las subclaves posibles y borrarlas todas en una función recursiva:
Código Delphi
[-]
function DeleteRegistryKey(const RootKey: HKEY; const Key: String): Boolean;
var
Handle : HKEY;
Subkey: array[0..255] of CHAR;
PathKey: String;
Index: integer;
begin
Result := False;
if RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS or KEY_WOW64_64KEY, Handle) = ERROR_SUCCESS then
begin
Index:= 0;
while ERROR_SUCCESS = RegEnumKey(Handle, Index, @Subkey[0], sizeof(Subkey)-1) do
begin
PathKey:= Key + '\' + String(Subkey);
DeleteRegistryKey(RootKey, PathKey);
inc(Index);
end;
RegCloseKey(Handle);
if RegOpenKeyEx(RootKey, PChar(ExtractFilePath(Key)), 0, KEY_ALL_ACCESS or KEY_WOW64_64KEY, Handle) = ERROR_SUCCESS then
begin
Result := RegDeleteKey(Handle, PCHAR(ExtractFileName(Key))) = ERROR_SUCCESS;
RegCloseKey(Handle);
end;
end else
Result := False;
end;
Saludos.