While it's true it would be hard to make web development easy if you had to rely on a single language, the good thing about Lisp is that it's more or less like coding with XML, but without all the boilerplate. Although it is considered a bad idea because of how horrible it looks and because there are much better alternatives, there are some languages that allow actual programming (as in, defining algorithms and not just data) that use XML, because tree/list structures can be used to represent programs. That's pretty much the whole basis behind Lisp, and it's also why it is so powerful.
Lisp is basically S-expressions where the first element of a node defines the function it executes. S-expressions, as you know, can also be used to represent data if you just simply define the first element of a node to be the "name" or type of the node instead of the algorithm that should be executed. This means "(sum 1 2 3)" could either be the sum of 1 + 2 + 3 in Lisp programming or a node called sum with the children 1, 2 and 3 in S-expressions, and they both use the same syntax and therefore parser. This means you can build the AST for both data definition and code definition, and the only difference between what they do is which execution engine do you feed them to.
This would ideally be the case, but HTML is no longer used for structure. Well, it is, but at the same time it isn't, so it is a fucking mess. Most modern websites just use HTML for data, and CSS for layout and style. If you have worked a bit with CSS, you will know why it is so fucking horrible, and why not many people dare to write a CSS from scratch.
If you haven't, a good analogy would be comparing CSS for layouts to using strings (CSS positioning properties) to attach the "data boxes" (divs) and then pulling each string until everything is in place, sometimes having to fight against strings that have accidentally tangled, or trying to compensate for strings that are pulling in another direction. To make things worse, all strings are "loose", in the sense that they are not easily grouped; to know what strings are pulling from each data box, you need to look at said data box and all the data boxes containing/surrounding it to know what's causing said data box to have a seizure whenever you pull a certain string a few centimeters. CSS is acceptable for colors and the likes, but ever since Web 2.0 design/HTML5 became the standard, we have been doing more complicated things with CSS, and now we have some Frankenstein monster so complex that it is fucking Turing complete.
Most sane GUI languages use layouts. Qt, CSS, AWT/JavaFX... they all have one layout where the programmer can put objects inside "boxes". There are no floating boxes, and nothing can get out of their containers. But CSS doesn't, because it is hip and cool to make outrageously flashy websites with animations and therefore we have to use the most complicated an unintuitive piece of shit technology ever designed for UI definition just so we can support their animations and crazy moving divs. Fuck, we used to use tables and iframes for layouts, which were piss easy, but for some reason that isn't okay for the Apple SanFran retard hipster webdevs that kickstarted HTML5 so now it is considered a bad practice.
If it was me, I would separate data from style (colors) from layout. The layout file would define the structure of the website with a tree syntax, probably by dividing each node in a similar way to how i3 and other tiling WM handle divisions, then it would pull data from the data file to display inside each box. The optional style file (everything should be so isomorphic that clients should be able to reuse the same style sheets for several websites to make everything look "more native") would define the color scheme and other optional things that don't really change the structure of the page.
That's a terrible idea unless you can find a way to make an extremely generic parser generator that allows the client to generate the parser and feed it into the virtual machine or AST interpreter. I don't want to download executable code just because some guy felt like using a special snowflake language.
Our best bet would probably be defining a virtual machine or a language that is easy to transpile to, but JavaScript is not just bad for being what it is (which is also a valid argument because JS is bad on itself), it is also ugly because the DOM is fucking retarded and no language can make look operating on it not bad.
HW don't be a fag