Make other types (shared Pointer) accessible in blueprint?

For blueprint variables I can choose a lot of types. But how can I choose other types than the native ones (int, float etc) and UObjects (class or reference etc).

For example: I have a plugin where I can access PointClouds using the Point Cloud Library (PCL). So I use the pcl´s pointcloud type for some algorithms.
Now the idea is to have a shared pointer so I can access the type within a blueprint (and assign it to a variable eg).

My first attempt was to encapsulate the pointer within a USTRUCT, but that does not compile:

USTRUCT()
struct FPointCloudPointer {
	GENERATED_BODY()
	pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr cloud;    // pcl shared pointer
};


UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class POINTCLOUDRENDEREREDITOR_API UPointCloudGeneratorComponent : public UActorComponent
{
	GENERATED_BODY()

public:	
    ...
	UFUNCTION(BlueprintCallable, Category = "PCL")
		FPointCloudPointer GetPointCloud();
   ....
}

Any suggestions please?

So, after a bit trying I decided to change it to an interface kind of access.

I wrote a UInterface class (so it can be seen in Blueprints), which tells the inheritand class to provide a getter function to the pointcloud pointer:

UINTERFACE(BlueprintType)
class POINTCLOUDRENDEREREDITOR_API UPointCloudFactoryInterface : public UInterface
{
	GENERATED_BODY()
};


class IPointCloudFactoryInterface
{
	GENERATED_BODY()

public:

	virtual pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr GetPointCloud() const = 0;
};

So, one component has a UFunction consuming those interfaces:

UFUNCTION(BlueprintCallable, Category = "PCL")
void SetPointCloudSources(TScriptInterface<IPointCloudFactoryInterface> TargetCloudFactory, TScriptInterface<IPointCloudFactoryInterface> SourceCloudFactory)
{
   targetPointCloud = TargetCloudFactory->GetPointCloud();
   sourcePointCloud = SourceCloudFactory->GetPointCloud();
}

And in my Blueprint I can choose any component that implements the interface can be chosen: