I have produced a plugin for adjusting the saturation of different regions of an image, based on their original saturation.
This has grown out of my luminosity mask plugin and uses much of the same code.
I hope others may find it useful.
EDIT: The plugin has been updated. Pre-existing selections and channels now appear at the top of the layers as masked layers. This makes them available to use as selection to limit the area affected by the plugin.
They will need to be made invisible before using "Merge Visible Layers..." to flatten the image.