I believe we already cleanup process instances on a process-by-process basis. As you can tell from the declaration below, the _lastRemoval field is local to the process DAO (at least in ODE 1.X):
private volatile long _lastRemoval = 0;
Right now, every time a new instance is started, the process checks to see if it can clean up any instances that have been running for more than 10 minutes. I think a cleaner approach would be to try and discard long-running instances periodically (say every minute), as opposed to just when a new instance starts.
The rationale behind the TTL constraint is that in-memory processes are typically short-lived and should not have to run for longer than 10 minutes. Having said that, if there is a good reason for creating in-memory processes that need to run for more than 10 minutes, then we may want to make that TTL threshold configurable (i.e., initialize it based on a user-defined configuration parameter).
Finally, I see that you marked a number of DAO fields as transient, which seems redundant, considering that the in-memory DAO objects are never serialized.