If the values are serialized and stored on disc as a string (e.g. MyEnumVal) and converted back to the enum value when deserializing, that allows you to reorder and add values to anywhere in the enum without breaking existing data. If instead, as they are in Unreal, they are stored on disc by their integer value or index in the enum, reordering the enum means those integers will now map to different entries in the enum. Obviously removing entries requires special handling (usually resetting it to either the first or last entry in the enum) and showing an error to let the user know their data is bad and needs to be updated by hand.
I don’t want to support changing the enum name. If you mean changing the name of a value in the enum, that’s not something I need to support either. That’s effectively the same as removing and adding a new value. Which leads me to…
If we remove a value from the enum then, of course, the code that uses that enum will need to be removed as well. The question isn’t about the code side it’s about the data serialization. The issue is that if I have enum values of Val1, Val2, and Val3 and then I remove Val1 (and the associated code), anything that was Val2 will be Val3 and anything that was Val3 will be invalid.