aubergine, in short, game shouldn't try to help us by saving everything which it can (which can lead to issues with loading it back), objects should be explicitly marked if they need to be saved (or where - I'm not against separating into session, local, profile, whatever, only for doing it that way

) and if they wish to be saved then they should be saved in the way I've exampled above or maybe even have special methods to return and parse back values (so you for example could have JSON object notation as INI property value

).
Anyway, saving not in session (save game) should be explicit and use QSettings like API (type neutral, at least for "primitive" types), like
storage.setValue("key", someValue) and
storage.getValue("key", defaultValue).
Adding new files and another notation will make it only more complex, if it would be used from start then maybe it would be good idea (but still JSONs only real advantage is that with proper indentation it lets to visualize data structures, the second least important is that allows parse less loading and saving).
This is my opinion, I'm voting for fixing the way how game saves and restores objects data (by better notation and / or allow to use explicit save and load methods for objects) and allowing to store values outside session (save game) using getter / setter API only.