I think reporting the statistics every time the program is linked would be a good idea. There is still a problem with function calls, however. With temporaries, the compiler can keep its own internal stack (a compile-time stack, more or less) and the game doesn't even need to know about it. With functions however, if they can call each other, you need a run-time stack. A run-time stack can, of course, be done, but the amount of information needed for function calls might make the ability to call functions from functions infeasible. For one thing, in order to return from a function call, you need to be able to jump back to the exact location from which the function was called, which means you need a record of the the next instruction that should execute after the function returns. If functions are not implemented as a separate logic invoked with a call() command, then going back through the call stack would be complicated at best, because goto commands take 2-byte values and all the vars are 1 byte. It may not even be possible. Also, the functions could presumably be defined to take different numbers of arguments (I won't even discuss different types, which would add even further to the complication), in which case you'd need an environment pointer variable and an environment pointer field in the activation record for a function (i.e., more variables not available for the game), so that you'd know where the previous activation record starts on the stack.
Actually, the more I think about it, the more I'd say that functions should not be able to call other functions. It would be too easy to fill up the stack, so the feature would be practically useless.
A run-time stack would also be dangerous for overwriting data(although, again, writing the compiler well would prevent it from going on unchecked). The thing is that any time a function was called, the compiler would need to make sure there was enough space available on the run-time stack (which could only be done at run-time, obviously) for the activation record. If not, the game might as well crash, because it's unlikely that the function call can just be ignored with proper results.