I have an idea how to solve caravans's stucks.
When caravan leader is entering to encounter then set the timeout for example 30 real minutes. If something happen, like stuck and pass those 30 minutes then run script caravans@r_KillCaravanDriver 1 [caravan's_ID].
Reset this countdown ONLY when caravan leader is entering to another encounter.
Terminate countdown when caravan is ended.