GetLifetimeReplicatedProps calls only once on subobject

That’s not a bug. You are misunderstanding how it works.

Unreal will automatically replicate any UPROPERTY declared properties by declaring that they are Replicated and implementing UObject::GetLifetimeReplicatedProps(). Warning: It is vitally important that you do not conditionally replicate values inside GetLifetimeReplicatedProps (i.e. do not use any of your objects instance state to conditionally wrap DOREPLIFETIME). Doing this will not do what you think (internally Unreal only ever calls GetLifetimeReplicatedProps() on the first instance of an object of a given class and it expects to be given the replication layout for that class, not for an instance of that class. That replication layout is shared by all instances of that class for the lifetime of the UNetDriver).

You can read more here:

https://wiki.unrealengine.com/Replication

Whatever problem you are having is caused by something else. Most likely, your subobject is not replicated its own properties correctly. If you post the code, I can take a look at it.