Ich hab das, wenn es sich nicht vermeiden ließ, meist so gelöst:
Unit1:
Delphi-Quellcode:
interface
uses Unit2;
type
KlasseA = class
...
b: KlasseB;
end;
Unit2:
Delphi-Quellcode:
interface
type
KlasseB = class
...
a: TObject;
end;
implementation
uses
Unit1;
...und dann eben in KlasseB jedes Mal casten, wenn "a" aufgerufen werden soll.
Ist nicht schön, aber auch nicht so schlimm.