Avoiding side effects does not require inventing a brand new purely functional language programming language.
So it’s more a question of whether it’s a nicer experience to wrap up a pure core in some impure outer layer, or just make the whole thing pure.
Nix the language is imo pretty nice for what it does, and lots of other config languages seem to have ended up in similar kind of “json with functions” part of the design space (e.g. dhall, jsonnet). My personal view is that purity in the nix language helps more than it hurts, and that the big design fuckup wasn’t writing a custom DSL, but writing a custom DSL without static types.
ISTM that if you dislike that, then there's GUIX.
Very briefly, AFAICT, it's "Nix but using Scheme".