If I understand your question correctly, the answer may depend on how you are creating the classes from which you instantiate the objects. Within the newest versions of MATLAB, classes can be defined in two ways: a "value" class or a "handle" class (MATLAB documentation here). Quoting from the documentation:
Value class: "Objects of value classes are permanently associated with the variables to which they are assigned. When a value object is copied, the object's data is also copied and the new object is independent of changes to the original object. Instances behave like standard MATLAB numeric and struct classes."
Handle class: "Objects of handle classes use a handle to reference objects of the class. A handle is a variable that identifies a particular instance of a class. When a handle object is copied, the handle is copied, but not the data stored in the object's properties. The copy refers to the same data as the original—if you change a property value on the original object, the copied object reflects the same change."
The sample code below gives some examples of how to interact with "nested" objects like you described above, both for value-class nested objects and handle-class nested objects:
% For value classes:
objC = C(...); % Make an object of class C, where "..." stands
% for any input arguments
objB = B(...,objC); % Make an object of class B, passing it objC
% and placing objC in field 'objC'
objA = A(...,objB); % Make an object of class A, passing it objB
% and placing objB in field 'objB'
% If the '.' operator (field access) is defined for the objects:
objA.objB.objC.D = 1; % Set field 'D' in objC to 1
objA.objB.objC = foo(objA.objB.objC,...); % Apply a method that
% modifies objC and
% returns the new
% object
% For handle classes:
hC = C(...); % Get a handle (reference) for a new object of class C
hB = B(...,hC); % Get a handle for a new object of class B,
% passing it handle hC and placing it in field 'hC'
hA = A(...,hB); % Get a handle for a new object of class A,
% passing it handle hB and placing it in field 'hB'
% If the '.' operator (field access) is defined for the objects:
hC.D = 1; % Set field 'D' to 1 for object referenced by hC; Note
% that hC and hA.hB.hC both point to same object, and
% can thus be used interchangably
foo(hC); % Apply a method that modifies the object referenced by hC
% If instead using get/set methods for the handle object:
set(hC,'D',1);
set(get(get(hA,'hB'),'hC'),'D',1); % If variable hC wasn't made, get
% reference from nested objects
foo(hC);
foo(get(get(hA,'hB'),'hC'));
As you can see, using a handle class can help you avoid having to chain function calls and field references by storing a copy of the handle (essentially a pointer) in another variable. Handle classes also take away the need to overwrite old copies of objects with new ones returned by methods that operate on those objects.
Hope this helps with what you were asking.