As you say, automatic cache breaking is very nice, and IMHO a must, since anything else is bound to impact the user experience for the editors. My goto caching addon since its release has been CE Cache, which solves this nicely.
For my 4–5 latest projects I've used the Template Partials approach (with Stash) increasingly. I love this way to develop in ExpressionEngine, but my main gripe is with caching. I feel that using Stash's own caching, and then having to code the breaking logic into the templates somehow, is way to fragile and hacky. Might work for smaller projects with few content types/variables, but not on more complex stuff.
So, I've continued to use CE Cache, with varying success. The problem is that you, naturally, have to cache the "controller"-part of your templates, together with your "view"-part, which, if you keep things DRY, means that you most of the time has to cache the whole page or nothing. This kinda defeats the whole point of CE Cache, which excels at caching more specific chunks of a page (or at least, that's where it excels in my opinion). The result is that you either have to break the cache more often (for all channels shown in a page, low variables, etc.), or you have to skip automatic cache breaking for some or all types of content (and leave it to the editor to do it manually). Neither is ideal.
On my latest project where I kept things very DRY, and the pages generally contained content from a lot of different channels, I'm left with the feeling that using the templates partials approach actually had a negative impact on the overall performance. But this is very project-specific, in many cases where you have simpler content, caching the whole page is perfectly OK.
I'm still trying to figure out what the optimal approach would have been, but I have a feeling that taking a step back and dividing the page into more (than one) native embeds, and thereby being able to cache separate parts of the page with CE Cache, would have been better. Not so pretty, but this is ExpressionEngine after all and sometimes it pays to work with the system instead of against it. Also, a parsed and cached embed isn't a performance issue.
Just my two cents.