You could use a hold_timeout and supply use the wf_callback.time_sysdate_plus_x funxtion to specify the timing offset. This will cancel the users task and allow someone else to be assigned to it.
I've used workflows a good bit, and I found there are a lot of things you can do by writing your own callbacks. You could for example use the time callback and write a function which will take a time offset. If the sysdate minus the offset = the creation date of the task, then you can manually finish it. Next time around the fire-transitions will automatically finish the case.