Changing a variable is simple. Creating multiple layers of indirection to change a variable in a pure fashion is not as simple. That should be obvious and apparent.
If you had to build the whole runtime yourself from first principles, functional behaviour would be way simpler to define.