I'm not sure what you mean by saying that the providers aren't enumerable "a priori". They have to be configured somewhere, right? And we (or anybody using open edx) controls their own settings in one place. There doesn't seem to be a need for the registry machinery if you just specify that the settings need to be defined in a python file, like the rest of the django settings. For instance, third_party_auth could just as easily have a settings.py that defines all of the providers available (loading json, if you like), with a way for people to add their own providers based on convention, such as attempting to import a certain setting file name. Then common.py would just import * from there.

Another possibility is to look into lazy-loading the settings, if necessary. It looks like python-social-auth needs a few settings to be present on import, but they can be LazyLists or LazyDicts or whatever.

My feeling is that it's better to come up with sensible defaults and defined conventions than to add a whole plugin system for defining static settings.