Here are my initial thoughts:
There will be two types of config classes, as there is today, one for global configuration and other for field configuration. The global config class will hold reference to the field configurations. The field configuration will have the field name. They both will extend a common class, which is some kind of map.
The key will be an special type (ConfigKey). This ConfigKey class will be final and will receive a generic argument when constructed. The user will need to define it and always use the same constants. To make sure the user uses it correctly, we can enforce ConfigKey.equals to only return true when the same instance is passed to equals method, so the map will only return the object for that key when the defined key is used. Example:
// developer code
final public static ConfigKey<String> MY_CONFIG_KEY = new ConfigKey<String>();
String myConfig = getConfig().get(MY_CONFIG_KEY);
// user code
getConfig().set(MY_CONFIG_KEY, "value1"); // works
getConfig().set(new ConfigKey<String>(), "value1"); // does not work, as the developer's code will look up for the key the developer has previously defined, any other instance passed as key won't be found when the developer's code is executed
I couldn't find a way to do the generic capability above with Enum. Actually, I don't see any reason to use Enum in this case.