Il n'y a rien de vraiment compliquer à faire ça. Tu créé un champ "theme" dans ta table "users" puis, dans ton AppController, tu crées une fonction beforeFilter comme ceci :
public function beforeFilter(){
if(!empty($this->Session->read('Auth.User.theme')))
$this->layout = $this->Session->read('Auth.User.theme');
else
$this->layout = 'default';
}
Tu peux aussi améliorer ça avec les cookies pour les personnes n'ayant pas de compte utilisateur, ça marche de la même façon.
Après, pour la mise en place des themes, tu respectes la répartition que tu as cité :
Pour le theme "BS3", tu créés un dossier "BS3" dans tes dossiers js, css et img et ainsi de suite pour chaque theme.