In the UPROPERTY system, all Structs are stored by value, not by reference. Therefore only enough space is allocated for the specified class. Any attempt to assign a subclass in to that variable or array will result in the subclass specific data being lost, just as it would in any C++ struct usage.
If you want a pattern similar to what you’re describing you’ll either need to use UObjects or some kind of self-managed internal state to the structs where you have a base class, a type enum, and then a pointer to memory that you self manage that has the per-gesture type payload. The “Unreal Way” to accomplish something like this would be to use UObjects.