Why? You can use Polymer and not its data binding. In fact you can use its polyfills and deal with mostly the standard based APIs. X-Tags and many others also use Polymer's polyfills.
DOM APIs are awkward as hell. But you can create Web Components and handle the data binding yourself. It's actually pretty easy to roll your own data binding. Now whether you should is another matter.
> This gets progressively worse as your components grow in complexity. Imagine adding a span around the text in p?
In this case you simply type in the span inside the template tag similar to what you have in the React JSX and then just importNode the contents into your webcomponent.
Nope, it's not. It's a thin XML-like DSL which translated into Javascript calls: http://bit.ly/2nC6fdu
You cannot buy into Web Components without buying into at least Polymer to supply you with data binding.
If you don't like React's size, there are slimmer options: Inferno, Preact etc.