I would say that any cave in system added would have to somehow take account of the material properties of the actual materials which are being worked on at the time. As it stands, EVERY object type has some kind of information in the raws.
These are the state names, adjectives and colors for the material.
The modifier used to all values involving the material.
Density information. Not used for very much, but it comes up in inventory weight and fighting.
Used for blunt-force combat, measured in KPa. Data scattered around the net (used compressive strength). All very spotty.
[IMPACT_YIELD:120000] used marble
Used for cutting calculations in combat, measured in KPa. Data scattered around the net (used tensile strength). All very spotty.
[SHEAR_YIELD:25000] used marble
A unitless measure for how sharp the edge is for combat purposes.
Used for pressing oil into jugs -- anything greater than zero needs to be glazed first.
Determines what sorts of objects can be built with the item.
There is also Wood, Soil, and other things in the material definitions that, given consideration, would lead to certain types of materials being better to dig in and build constructions out of.
Also, a simple "cascade" of forces would seem to work well for making cave-ins realistic and at the same time allowing for things such as buttresses and really nice architecture.
All blocks, be they constructed or natural, could support a weight proportional to their COMPRESSIVE_YIELD (maybe another variable would be more appropriate, but bear with me, here). When a square is disturbed by it's environment being changed (digging around near it) or something being placed on top of it (like another rock or a dwarf or a minecart), the weight of the square (plus whatever's on top of it) is calculated. Then, the squares below it and adjacent to it are checked. The weight is divided amongst the squares present, and transfered to them.
Now, if the amount of weight that it's calculated a specific tile EXCEEDS the COMPRESSIVE_YIELD for that square, it will fail, structurally. If it's a constructed item, it will be spontaneously deconstructed. If it's a natural stone wall, it will be converted into an empty square with a stone in it. This will change the local environment, and and cause other squares to be recalculated as well.
In this system, it is very possible through good planning to have large, wide, open roofs that do not cave in... one must merely make them out of the right materials like Adamantine or Steel. It is also just about IMpossible to dig out large soil or sand "caverns" without providing some kind of supports. Entire fortresses would no longer be able to be balanced on a single soap block, since it would squish under the weight.
Which brings me to the Caverns. It would be easy enough, during cavern generation, to find the weakest points most prone to cave-in and simply make a column of rock to support them. This would actually mimic the real behavior of column formation in real life caverns.