One of the ideas for my 7DRL is what I call an evolution blob. In that let's say you start your level generation with ocean tile. What's next? It could be probably sand tile, then sand tile could become dirt etc. Each tile would have the next evolution stage or several ones which then could create a branch in the evolution. To avoid everything become the last stage of evolution there needs to be some kind of percentage value for creation and also possibly a proximity check for stuff like creating dirt next to sand, but not next to ocean (where it would erase the sand tiles).
Then "blobs" are created over each other to proceed the tiles in that place to next generation. I don't know how far you can go like that, but at least simple terrain generation should be quite easy. I guess you could create some kind of rooms by applying a room shaped "blob" with extra value to proceed the evolution from natural environment to artificial walls.
I was talking about planning everything to paper, but it didn't work, because I had the kind of ideas that needs to be implemented to see if they work. Beside that I'm trying to think hard what is the role of classes vs. procedural functions, because I want to stay away from classes as much as possible.