I would like to be able to recover long-running workflows, analyze the fault and maybe deploy a new package that handles the error gracefully. I can't do it if the workflow just up and dies on me.
There isn't anything that would do this automatically.
You could, however, create a separate column in the list that simply stores status information. Then, everytime your workflow kicks off, it starts by seeing if you have an existing status in that column and then skips to that step if it was part way through the workflow previously.