I think I like your second suggestion better. At the very top of each UDF, it could just establish the next entry point in the queue. Then if there is an early exit (such as dead or disabled) I don't have to worry about looping through setting up the next queue entry in the parent quest script.
If an actor is marked as invalid or to be deleted, the UDF will just be skipped an the actor will naturally get dropped off the list.
I'm still not sure what to do about dead actors though. Once an actor is dead, most of the UDFs and scripting would be ignored, and I'd hate for there to be constantly queued up items that are unnecessary. But I also have to take into account the possibility of an actor being resurrected.
I suppose I could have two queues: one for dead, one for not-dead. Whenever there is an "on death" event, the dead actor would be added to the dead queue. There is only one UDF for the dead queue, and it's only 30 lines of code that needs to be updated every .1 seconds. The live queue will naturally filter itself out because there would be an early return if "get dead" is true.