> Recursion is required to implement non-primitive recursive procedures
This is very untrue. While loop and a stack.
> cannot be implemented with a fixed number of state variables
Of course it can't, any function outside DSPACE(O(1)) can't. The fact that you have an implicit call stack doesn't change the space complexity.