BreakRooms() could, at a random chance, tag the room as a special room, in which case recursion is broken
The room type tags are passed back to generateMap()
If the special room type is, say, Pillars, then pillars are created
If the special room type is Armory, then (and only then) weapons etc are added in Actor spawning step
The tags, as well as room boundaries can be stored in the map itself, because then building e.g. patrolling AIs is much more simple
Room type CommandCenter can be surrounded by room types Perimeter. In Perimeter areas, you need to have correct credentials to walk around, but in CC nobody bothers asking, because that was supposed to be taken care of in Perimeter.
A couple levels of cellars would be cool. Probably some sort of CA cave digging would work.