Darum auch meine Empfehlung möglichst nur das USES im Interface zu benutzen.
Dort steht dir Reihenfolge fest, also immer in der Reihenfolge, wie es im Code steht.
* erste
Unit
* dann das was in dieser
Unit steht
* dann zweite
Unit (falls nicht bereits in untergeordneten Units geladen)
* usw.
Das was im USES der Implementation steht, das kann der Compiler in beliebiger Reihenfolge einbinden.
Auch werden UNITs der Implementation eventuell erst nach dem Code der Initialization geladen und bereits vor der Finalization entladen,
während die UNITs im Interface immer vor Initialization geladen und erst nach Finalization entladen werden, womit deren Funktionen dort (sicher) nutzbar sind.
Selbes gilt für Codes der Class-Constructor und Class-Destructor.