マルチスレッド(もどき)は、

メインスレッド(タスク)
↓
スレッド(タスク)1 *
↓
メインスレッド
↓
スレッド(タスク)2
↓
メインスレッド
↓
・・・・
↓
メインスレッド
↓
スレッド1 (*の続き
↓
・・・

ができればいいんだから、単純に * でのスタック状況などが保存できれば、
それらを切り替えることで実現できる。
で、保存するのがsetjmp(スタックポインタやリターンアドレスなどを保存)、
復元するのがlongjmp。