Okay, looks like there is only one way to do it right, by passing and instance of the outter class to an inner class.
the best place to do it is the inner class constructor.
This requires an additional field in every nested class, that holds an instance.
From this level you have Full access to the outter class ( even Strict Private fields ).
A simple example using the class structure from my post above:
Test := ClassOne.Create();
{ Test is a ClassTwo parent }
Test.FieldOne[2] := ClassOne.ClassTwo.Create(Test);
{ Test.FieldOne[2] is a ClassThree parent }
Test.FieldOne[2].FieldOne[5] := ClassOne.ClassTwo.ClassThree.Create(Test.FieldOne[2]);
Then, evey nested class needs a field, i.e called Parent:
{ ClassTwo }
Strict Private
Parent: ClassOne;
...
{ ClassThree}
Strict Private
Parent: ClassTwo;
Usage:
Procedure ClassOne.ClassTwo.ClassThree.Test();
Begin
{ Access ClassOne FieldTwo from ClassThree }
Parent.Parent.FieldTwo;
End;