Just wanted to add to your argument an inverse argument (for JSX, instead of against Vue):
JSX is actually just JavaScript with this one special rule:
<foo bar={baz}>child1 {child2}</foo>
becomes transform("foo", { bar: baz, children: ["child1 ", child2] })
That's it. All the rules of JSX can be inferred from that one transformation.