Ahead-of-time macro expansion can be expensive performance-wise, and JavaScript has a constraint that’s fairly unique among programming languages: time from getting source code to first execution has to be as small as possible.
So already there’s a reason to prefer an external system like Sweet.js where code is shipping in pre-macro-expanded form. Unfortunately Sweet.js nor any other language with macros has caught on in this space – probably because front-end developers are wimps ;-)