The important thing to understand here is that the primary thing that your Flask service really does is allow end users to download and display formats that are supported in a browser. ClojureScript is not supported in any browser. In fact, browsers typically only really provide support for three things: HTML, JavaScript, and CSS.
When you make a frontend application you might write the code in ClojureScript, maybe using reagent components returning Hiccup, and perhaps even some Clojure DSL for writing CSS. It doesn’t really matter. At some point you will need to compile it to the 3 formats supported by browsers.
Even developers writing frontend applications in JavaScript typically need to compile their code. They write it in the latest version of JavaScript and then use babel or some other tool to compile it to version of JavaScript that is fully supported by all major browsers. If they use React, they don’t write HTML either. Instead they usually write JSX which is an HTML-looking DSL similar to the Hiccup used in reagent/Re-frame.
So no matter what you do, there is always bound to be a compile step where you compile whatever you have written in whatever combination of languages to HTML, JS, and CSS. Your Flask app simply returns that HTML, JS, and CSS. The user’s browser doesn’t care what it was before it became HTML, JS, and CSS.
However, if you’re making a ClojureScript frontend application you should consider using transit to send data back and forth between your backend and frontend application. In your case you probably want these
Transit works best if you have Clojure on the backend, since then you can almost treat your backend and frontend code as one single Clojure application. I think it will work pretty well for Python + CLJS too, though.