I’m having an odd issue as well attempting something very similar to what you are doing.
Attempting to create sub components and using the C++ CustomComponent directly on a BP Actor attaches the Component and the new ones correctly to the Actors root, but creating a BP derived from CustomComponent and using that BP Custom Component and the new Component roots are at origin and won’t move from there.
Not to hijack but talking to the community and research all points to a component making new components can only reliably do so at runtime. I’m stubbornly still trying to see if I can get it to be consistent though. Subbing to this because I think the answer here might give me insight to my issue.
Exact same engine version.