It's to do with how the displacement data gets pulled from your memory cache when ingame.
When a model gets rendered its vertex mesh gets stored and pulled again for other versions of itself. This saves memory in general, but it's also because it's vertex based and so its related data is equated differently (its properties are stored and retrieved more efficiently i guess). The same savings that occur for the model and its vertex mesh apply to a displacement. Although, of course, it's a little different because models can be copy/pasted etc increasing the efficiency of using that particular model every time it's used. Having other additional benefits and draw backs of their own. You also have other things to consider such as lightmaps, vertex density/count and subsequent collision data.
a func_detail's purpose is mainly to prevent/reduce the impact of solid geometry on things like vvis, visleafs and decrease compile times/make compiles more efficient, and ingame rendering more efficient through preventing unnecassery cutting of faces etc. Since the presence of "world geometry" is fairly destructive to anything it touches. Including func_detail's touching other func_detail's (as they are only "fake" entities, they still cause water indices).
At least.. this is the lamest of terms i can put it in.