I really like CLJS, when it works it really feels like you have superpowers - immutable data structures and higher order functions being idiomatic in Clojure makes Reagent more ergonomic than React in vanilla JS.
Additionally the Clojure philosophy of embracing the host makes interop feel quite ergonomic when you do need to duck down into JS.
That said, I wouldn't say that the CLJS->JS compilation is watertight (especially with advanced compilation turned on) and in any non-trivial project you will run into issues as outlined in this blog post. Once you are familiar with the stack most the problems fall into a set of predictable buckets (like the ones mentioned in this article) but debugging them for the first time can be gnarly.
CLJS is not a tool you can use blindly without knowing how it works IMO. But maybe that is true of the modern JS stack itself as there is a lot of churn in JS too.
That said for server-side CLJS we had success turning off advance Closure compilation as package size isn't as much of an issue