I did some investigations today, and found at least why software loading isn't working. Fixing it is another matter entirely, currently beyond my capabilities.
In optionsms.c the routines 'SetSelectedSoftware' and 'GetSelectedSoftware' are commented out. 'SetSelectedSoftware' is used to write your selection to the ini file, while 'GetSelectedSoftware' displays what is already loaded into the Device View.
This led to to the complications of windows_options vs winui_options, just as the core has emu_options vs core_options. Suffice to say that you can't simply replace one with the other. Which all goes to show that the options system in the core and elsewhere is all far too complicated for something that really should be quite simple. To give an example, run mess with the windows build, then run it with the sdl build, then the windows build again. The sdl build will remove the windows-only options, and then windows will remove the sdl-only options. Thus they are incompatible.
I have plenty of ideas of fixing all of this (by a complete rewrite of the options code), but getting it accepted... well that is something else.