I found this [] article of Carmack. While reading, I understood there is a large set of gray shades to pureness of "pure functional" code. He calls being functional a useful abstraction, a function() is never purely functional.
When people say pure functional programming they never mean the entire program is like this.
Because if it were your program would have no changing state and no output.
What they mean is that your code is purely functional as much as possible. And there is high segregation between functional code and non functional code in the sense that state and IO is segregated as much as possible away into very small very general functionality.
[] https://web.archive.org/web/20120501221535/http://gamasutra....