DataFactory.GetProperties and IDataFactory.GetDataAccessors should get called once for your SelectedItem, and then again for each IPropertyDataAccessor you return from that call. In the subsequent calls you can then return IPropertyDataAccessors for any complex objects, which should give you the nested behavior your're looking for.
If you're implementing IDataFactory, you may want to instead consider subclassing DataFactory, as you can use base.CreatePropertyDataAccessor to create your IPropertyDataAccessor. If you're implementing a custom IPropertyDataAccessor, it needs to return both Value and Values for nesting to work. Values by default is an object array containing Value.