I must admit I don't really understand your questions.
Re: immutable objects: I think this is a VidsualWorks specific thing, isn't it? In VAST,there is no implementor of isImmutable:. What is the effect that indicates the object is immutable? DO you get an exception when sending a setter message? Which one? What is the superclass of your persisted objects?
What's the problem with a session already having a unit of work? What exactly do you try to achieve?
I am not sure I will be able to help with any of your issues, but I'd like to try...