2. IDEA 1:
Forwarding a Class;
Class Name = Class IS UnitNameThatHostIT.CLASSNAME;
Maybe the compiler can just look there once for the Class definition?
In a circular dependency relation, the UnitNameThatHostIt is not be compiled yet, so you can't reference it.
3. IDEA 2:
Have the compiler look at the Uses List in the Implementation section and use that reference if one isn't declared in the interface section with maybe a special indicator or HINT ?
Declare before use is pretty big in Pascal, and such reference is a "use".
Interface and implementation and order of compilation in general is quite rigidly defined in a single pass compiler. You would need to change the whole compiler and language to a multi pass model to realistically do something so direct.
There are other workarounds.
Factor one of the classes to a base class in a different unit, with virtual methods if needed. Yes, that is not you need to typecast if you need derivative properties. Or if typecasting gets too much, use a type helper with an inline method that does the casts etc.