This is specific to protobuf-net. If you're using v3, the main usage here is to provide explicit names for the enum and (via ProtoEnumAttribute) the defined values; the names only matter if you are generating a .proto from a code-first model (GetSchema(), GetProto<T>(), etc)
In v2, you can *also* use ProtoEnumAttribute to provide explicit serialization values different to the natural value, or you can tell it to *always* use natural values (with no attempt to consider mapped values) via EnumPassthru on ProtoContractAttribute, however: these features are deprecated in v3 - enums are now *always* treated as direct pass-thru values with no attempt to map values.