I guess you could do it in stages:

- generate rooms
- generate exits to rooms
- (randomly) match room exits
- generate (random) paths between matched exits
- generate doors/items/mobs/etc