Steve,
You can change themes programmatically: context.setSessionProperty("xsp.theme","newTheme");
I usually place a theme switcher in the user menu, which is built with <xp:link> 's
You need to reload the page in order to apply the new theme:
var currentPage = "/"+@RightBack(context.getUrl().getAddress(),"/");
context.setSessionProperty("xsp.theme","newTheme");
context.redirectToPage(currentPage);