This is the heart of the whole thing, and until we solve this, everything else is completely irrelevant. I have a decent roadmap to follow rearranging the GUI, thanks to Luis Garrido, but it seems completely pointless to me to fix the GUI while the whole configuration dialog itself remains broken. One way or another, this problem needs to be solved up front.

I'm completely stuck, and have no idea how to make further progress from here.

The configuration pages aren't working because their individual apply()
methods are never called by:
src/gui/dialogs/ConfigureDialogBase.cpp

void
ConfigureDialogBase::slotApply()
{

for (configurationpages::iterator i = m_configurationPages.begin();
i != m_configurationPages.end(); ++i)
(*i)->apply();

}

configurationpages is:
src/gui/dialogs/ConfigureDialogBase.h

typedef std::vector<ConfigurationPage*> configurationpages;

ConfigurationPage is:
src/gui/configuration/ConfigurationPage.h

class ConfigurationPage : public QWidget
{

Q_OBJECT

So the std::vector is supposed to contain a list of pointers to
ConfigurationPage objects, and this code in slotApply() is supposed to
iterate through that list and call each object's apply() method.

The list is empty, because all the code is broken with comments:
src/gui/dialogs/ConfigureDialog.cpp

I'm not sure what page→setPageIndex(blah); used to do, but the new
m_tabWidget→setCurrentIndex(blah) only serves to make sure the configuration
dialog always opens on the Notation tab, as far as I can tell. No matter. I
only mention that in passing.

The real problem is the m_configurationPages.push_back(page) has been
commented out, because it fails with: