Why do you claim that local variables and function calls are specific to C? They seem to be very popular among programming languages in general.
On MOS 6502 we used self-modifying code rather than the stack because it was more efficient and that CPU has no instruction and data caches, so they couldn't be corrupted or invalidated.