It doesn't take any particular infrastructure to program in a purely functional style. All you need is to be able to see side effects in code, to notice when they place an extra mental load on your mind and require you to hold more things in mind at once. And of course, you need to know how to abstract them away, how to make this mental load go away. Most modern programming languages are built for engineers. This is why they provide excellent capabilities for abstraction, including imperative languages such as C or Java. This is why, if you know what to abstract and how, you should be able to abstract that in these languages. And if you know precisely how the imperative style can hurt you, you can shield yourself from the trouble.
Moreover, certain imperative programming languages provide a specific infrastructure that facilitates...