This sounds like it should be implemented in terms of delegation. I’m envisioning the following:
data class Foo(x: A, y: B)
data class Bar(z: C)
data class FooBar(foo: Foo, bar: Bar)
as Foo by foo, as Bar by bar // generates delegating accessors