I’ve done most my programming in the past several years in Elixir, where mutable variables aren’t an option, and it’s been a great dev experience. An entire class of bugs disappears and it makes concurrency very easy to reason about.
I’ve written a lot of Clojure and Clojurescript over the past ~12 years and I find it a very natural way to program to the point that it’s the single biggest thing I miss when I work in other languages like javascript and Python.
Author here. State is not immutable, it is mutate-in-place via atomic swap. That makes it somewhat different than both functional programming and imperative programming, but it's not an excessively difficult programming style to use in practice.