Just a general FYI - I was using Scribe from the guardian team before ProseMirror got open sourced. They have a nice page on contentEditable inconsistencies that may be a valuable resource for ProseMirror development!
From Scribe (basically their approach was to try and make contentEditable usable - bad idea):
A rich text editor framework for the web platform, with patches for browser inconsistencies and sensible defaults.
In a way, making contentEditable usable is also what ProseMirror does. But we do avoid execCommand entirely, which sidesteps 90% of those issues. The Chrome shadow DOM flakiness did bite us, but was already reported and worked around.