примерно такую же проблему сейчас решаю.
нужно сделать возможность инкрементной (во время выполнения) кастомизации внешнего вида программы, от размера и положения кнопок до их цветовой гаммы, и это не считая настроек того что должны делать эти кнопки. Помимо этого должна быть возможность собрать все настройки в группу и при определённых условиях применить эту группу.
сейчас всего пара настроек и хранятся они в preferences.
сначала думал реализовать всё в preferences но из за группировки и условий размер и сложность изменения этих preferences будет мега огромна.
потом подумал о БД, но тут опять гемморой в добавлении\удалении\изменении как самих настроек так и их количества.
в общем из-за того что при добавлении новой "фичи" придётся перелопачивать код сразу в нескольких места (и это не считая реализации самой "фичи") отказался от выше озвученных идей.
но не всё так грустно, пришла в голову вот такая мысль "хранить настройки в формате xml или json". Собственно хранить в виде текста дефолтные настройки в preferences, а групповые в БД.
Когда настройки понадобятся они парсятся из json-строки в map и передаются куда надо. В итоге имею возможность не трогая сохранение\загрузку\передачу данных в preferences и БД, добавлять настройки фич, нужно только подправлять десериализацию из за вложенности настроек.
если нет вложенности настроек (вместо map просто набор переменных) то по крайней мере в gson сериализация\десериализация происходит в пару строк кода.