I have fully tested just this workflow as working
PrimitiveComponent was my chosen base class, you could use Scene component for components that dont have collision.
UPrimitiveComponent* NewComp = ConstructObject<UPrimitiveComponent>( CompClass, TheOwner, YourObjectName);
if(NewComp)
{
NewComp->RegisterComponent();
//attach or set location, etc
}