If your type is reflected as a UCLASS() or a USTRUCT() then you should be able to expose it to Blueprints just by using Blueprintable / BlueprintType tags. If you have some external system handle or similar (e.g., a smart pointer to a third party class you can’t make reflected) then you should probably wrap it in an opaque handle struct that can be passed around to Blueprints but only actually operated on in C++ code.
In general, you can mix reflected and non-reflected (plain C++) classes freely in your game code, but anything that needs to be accessible to Blueprints, network replication, etc… should be in a reflected class.
Cheers,