Just to clarify a couple of points here, to avoid confusion. SSViewer::set_theme() has been used to set the theme (in _config.php) for quite some time now (since 2.3.0 at least). It is the "usual" method of setting your theme and is populated by the installer when you first install the CMS. The [url=http://doc.silverstripe.org/themes:developing]Developing Themes[/url] documentation explains its use.
As of 2.4.0 there is now an option to dynamically set the theme in the CMS interface, choosing a theme in Site Config does not actually edit the _config.php file, the setting in this file (i.e. SSViewer::set_theme) serves as the default theme and the Site Config setting will override this default once it is set. Content_Controller uses this setting if available, otherwise serves the default theme.
I guess with the introduction of this new feature in 2.4.0 the concept of a "default theme" is quite new and so the documentation does not make this point very clear. Personally, unless there is a use case for CMS users needing to dynamically change the theme I would use SSViewer::set_theme() as the primary mechanism for setting a site's theme.
So, if you're not seeing a change in theme once you've changed _config.php (and used ?flush=all) it's worth checking that the theme has not been overridden in SiteConfig.