In T311717: Display Special:Preferences as a vertical menu instead of tabs on mobile for AMC users we were able to use the resource loader within the special page to load icons sets, but we also need to allow extensions to specify their own icons, which was called out in a code review:
Esanders: Extensions should define their own icons, which means you'll need a way for the preference hook to add to this data.
Based on our (the moderator tools team) reading of GetPreferencesHook:
The things in the preferences description array should directly inform the html form fields related to a given preference. The only thing that I see existing at a higher level in that data structure are the section keys themselves, which are needed to correctly place those fields.
It looked to us like we'd need to update the signature of GetPreferences to accommodate additional data, and it wasn't immediately clear to us that there was a good way to do so in a backwards compatible way with existing implementations.
The other place where we saw something altering the top level of the preferences form is another hook, PreferencesGetLegendHook:
We will add a new preferences hook, following the existing pattern.