Я пару похожих по смыслу задач решал через динамическое создание классов C++. Каждый режим это класс. Все классы режимов унаследованы от одного базового. При старте создается экземпляр класса, соответствующий нужному режиму, при смене настроек он ликвидируется через delete и через new создается требуемый новый. Из остальной программы все классы вызываются под видом базового класса, т.е. их специфика полностью спрятана.