Well, we can always make n2=n-1. That's not a problem.
Earlier today, I was talking with a friend about the possibility of writing a language that could simulate this. It would work by running virtual "threads" (it's kind of a misnomer since they wouldn't run concurrently) which would be forked (that is, paused, duplicated, and resumed) or rejoined (stopped and destroyed) accordingly when there were calls to the API functions. In other words, it creates parallel universes to run programs.
I find it too tempting not to try.