Non ho compreso chiaramente il problema.
Ci sono due "posti" dove le "Uses" possono essere inserite:
1) Sezione Interface;
2) Sezione Implementation.
Un riferimento incrociato non può essere inserito nelle Interface.
Se la Unit1 è presente nella Interface della Unit2, allora la Unit2 NON PUO' ESSERE PRESENTE nelle sezione Interface della Unit1 e viceversa ovviamente. Questo in linea generale ... se non ci sono errori anche se entrambe "si richiamano" allora vuol dire che il doppio USES non ha comunque senso perchè una delle due Unit non richiama l'altra.
In linea generale le unit (ossia i sorgenti Pascal) dovrebbero essere delle entità autonome, ossia svolgere delle elaborazioni autonome con riferimento ai framework di base (LCL, FPC, VCL, FMX, SYSTEM, UWP, RTL, etc ...) e a librerie di terze parti (o proprie). Ma ovviamente non ha alcun senso che una libreria di terze parti (o anche una propria se fatta bene) abbia dei riferimenti a qualcosa che è nel progetto che le usa ....
Normalmente si usa inserire nelle sezione Interface le Unit che hanno oggetti (classi, interfacce, record, etc ...) e variabili usate sempre nella stessa sezione Interface da altri oggetti che li dichiarano come membri propri. Devono essere inserite nella sezione Interface anche le Unit che dichiarano e istanziano oggetti con visibilità globale (molto spesso sono variabili semplici o record).
Nella sezione Implementation invece vengono inserite le Unit che vengono usate solo con visibilità locale.
Esempio di NON USO !!!:
Unit Unit1
Interface
Uses ......, Unit2, ....
type
TProva1 = class(TProva2)
SonoQui1: boolean;
end;
var Prova1: TProva1;
....
.....
****************************
Unit Unit2
Interface
Uses ......, Unit1, ....
type
TProva2 = class(TProva1)
SonoQui2: boolean;
end;
var Prova2: TProva2;
....
.....
Questo è un esempio tipico (che nessuno si sogna neanche lontanamente di applicare) in cui ci sono dei riferimenti incrociati dichiarati in due Unit. La classe TProva1 e TProva2 sono dichiarate come derivate una dall'altra. Ciò non è possibile (ma non lo sarebbe neanche se fossero nella stessa Unit) oltre che per il riferimento incrociato anche per ulteriori motivi .....
I riferimenti incrociati devono essere sbrogliati in più Unit (o più oggetti) e ciascuna Unit dovrebbe essere tipicamente autonoma.
Io normalmente uso creare una Unit solo ed esclusivamente contenente le definizioni di qualunque oggetto ad uso di tutte le altri classi. Tutte le dichiarazioni in questa Unit DIPENDONO solo ed esclusivamente dai framework di base, da librerie di terze parti, da wrapper o da librerie personali.
Questa Unit potrà essere richiamata ove serve o nella Interface o nella Implementation in quanto non contiene riferimenti diretti al progetto (è il progetto che usa le definizioni di questa Unit).
Spero che sia stato utile.