新しいスレッドを積むのはいいんだけど、
古いスレッドが不要になったということをどうやってLUAに知らせるの?

最初に
ls = lua_newthread(...);
lua_resume(ls, ...)
を実行したとして、ls は中断状態のまま残っていると。
で、中断状態をやめて、最初から実行したいということで、いきなり
ls = lua_newthread(...);
lua_resume(ls, ...)
をもう一度呼び出すと、古い ls が上書きされるけど、古い ls への参照も、
なにもかもまったくいじっておらず、ただ単に新しいスレッドを追加しただけにすぎないわけで。

古い ls の参照カウンタをデクリメントするなり、古い ls への参照を
削除するなりの処理がまったく入っていないと。