Cannot put FOnAttributeChangeData as delegate param or uproperty, even though it works fine in methods

All parameter types of dynamic delegates must be supported by reflection. FOnAttributeChangeData doesn’t have the required macros so it isn’t. Same if you want to use it as a UPROPERTY.

What you can do is wrap the FOnAttributeChangeData in another struct that you expose to reflection. However this may be dangerous since it contains a raw pointer const FGameplayEffectModCallbackData* GEModData; that could easily become dangling. And you’d have to deal with garbage collection of the contained UObject’s.