Classes deriving from UObject (UCLASS) are the only “pointer” types that the reflection system understands, this is because they are tightly integrated with the Garbage Collection system, among other restrictions.
I too weighed up the differences, essentially, as long as you aren’t “churning” UObjects, the extra overhead isn’t that great.
Alternatively, you could write a custom serialization function and handle serializing the nodes yourself, and also write a details panel customization for the UGraph object in order to show them in editor. But, that will be a mountain of probably quite error-prone work.