I have code that has worked for me. I will run with it tomorrow and then commit if I still think it works.
For those playing along at home there already was a registry for preference change listeners. So on paper this was a simple as registering new listeners and then having them respond by updating the GUI. The problem is that the registry only keeps a weak reference to the listeners. My first implementation was to create a listener class but it turned out that they were being garbage collected. As a software archeologist I'd say the registry has an undocumented convention that it expects the GUI object to also be the listener. Thus when the GUI object itself is no longer needed the listeners will unregister themselves. I won't question why this was done, but in 2016 it is probably not what any team I have supported would have adopted as an implementation standard.
The HP/MP Restore tab should now be updated whenever the following change:
hpAutoRecovery
hpAutoRecoveryTarget
mpAutoRecovery
mpAutoRecoveryTarget
manaBurningThreshold
manaBurningTrigger