I have a solution, although it's somewhat like a hack...
- the page has been defined a 'declaredProperty', e.g. 'layout'
- the declaredProperty is retrieved within a portlet instance, which is placed on every page, and set into the APPLICATION_SCOPE's session
- a custom ThemeTagHandler retrieves the layout value from the page-context's session and replaces the css file generated by theme.assembleResponse()
Is there a smarter way of doing this in Portal 2.4?