Or, trivially, you could have func1 return immediately after calling func2.

Each function call pushes that function's block onto the stack and as each function returns it pops its block off of the stack. Attempting to bypass normal calls and returns means that you also need to clean up the stack on your own. Why wish for such a mess?