I think the ideas behind STM (http://en.wikipedia.org/wiki/Software_transactional_memory - usually used for concurrency), present some interesting opportunities to automatically 'rewind' state in the case of exceptions.
I can imagine systems where you provide multiple implementations, and the system automatically finds one that works.