Ich habe es zwar noch nie verwendet, aber TRegistry.MoveKey scheint das zu sein, was Du brauchst.
Zitat:
Die Methode verschiebt einen vorhandenen Schlüssel zusammen mit Unterschlüsseln und Datenwerten an eine neue Position. Dabei wird ein neuer Schlüsselname verwendet.
procedure MoveKey(const OldName, NewName: String; Delete: Boolean);
Beschreibung
Mit MoveKey wird ein vorhandener Schlüssel zusammen mit Unterschlüsseln und Datenwerten an eine andere Position verschoben oder kopiert. Der Kopiervorgang verläuft rekursiv, das heißt, eventuell vorhandene Unterschlüssel und deren Datenwerte werden ebenfalls kopiert. Nach Beendigung des Vorgangs wird der neue Schlüssel geschlossen.
Der Parameter OldName bezeichnet den Schlüssel, der kopiert oder verschoben werden soll. Der neue Name für die Kopie des Schlüssels wird in NewName übergeben. Wenn der Name in NewName noch nicht existiert, wird er von MoveKey erzeugt. Der boolesche Parameter Delete steuert, ob der alte Schlüssel nach dem Kopiervorgang gelöscht werden soll: True bedeutet, daß OldName nach dem Kopieren gelöscht wird. Andernfalls wird der alte Schlüssel geschlossen.