As its name suggests, StaticStruct is static, so it doesn’t support polymorphism indeed.
UStructs are not as flexible as UObjects in terms of casting/rtti.
All UObject subclasses have a UClass* Class member which is you can access via GetClass(), that are automatically added by GENERATED_BODY.
UStructs don’t have this, so there’s no way to figure out the type of a struct at runtime, unless you implement it yourself.
The Engine does something like this with the FDamageEvent structs
Each FDamageEvent subclass implements its own ClassID and overrides GetTypeID to make it possible to determine its type at runtime, after which you can safely use static cast.