Front-end development is really great right now, because of React, which makes it so you can develop in one language, but unlike past attempts like GWT [1], doesn't rely on leaky abstractions.
Everything is a leaky abstraction at some point, the question is how much of a pain is it once you do need to dive underneath?
Personally I’ve found debugging and dealing with anything non-standard in React to quickly turn into a huge mess (but given all the praise heaped on it by other developers I know, I’m willing to concede that I might be doing it wrong).
I don't buy that argument. On the one hand you claim there's no leaky abstraction, yet your argument only works if "Javascript with JSX is a single language".
Then "C++ with inline assembler" is also a single language? What about English with quotes in Japanese?
Since JS is the only thing you can actually use[1] in a browser you can argue that anything that runs in the browser is syntactic sugar (and in fact, Typescript is syntactic sugar).
A less flippant analogy might be macro support in Rust. It's clearly part of Rust, but the syntax is completely different and it requires IDEs to have completely separate processing just to handle it. I wouldn't consider that to be mere syntactic sugar either.
JS and JSX are isomorphic (in the mathematical sense) hence why JSX is considered just syntactic sugar.
JS and TS aren't isomorphic (there's no inverse morphism once you go TS->JS that can bring the resulting JS back to the original TS) hence why TS is a different language (even if a superset of and compiled to JS).
Or, if they are, they are in the same way of a custom XML templating language that can be translated to a specific javascript library implementation and then back to XML
1: http://www.gwtproject.org/overview.html