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