Choreographic languages are often hosted in a functional language like Haskell and OCaml though so the analogy isn’t quite right
I would instead say that choreographic languages enforce global visibility of communication. The global behavior of the system is available syntactically. It doesn’t necessarily or even typically involve mutation, explicit loops, side effects etc at least in the literature.
I appreciate the details! And alethic's explanation in the comments was easy to understand. The key part I missed was that it's a messaging system between software processes. And your insight that it's used in functional programming helps too!