What options, if any, do I have to use an enum in C++ that supports reordering/inserting/removing of enum values?

I’m really not following you here.

enum MyEnum
{
    Value0,
    Value1
};

Value0 is index 0 and Value1 is index 1. I save the string “Value0” to disc and then I change the enum to:

enum MyEnum
{
    Value1,
    Value0
};

Value1 is now index 0 and Value0 is index 1. I read the string “Value0” from disc and convert it to MyEnum::Value0. Its index is now correctly 1 even though it was 0 the last time I saved.