I've decided to abandon the tool route. By running outside the tool stack I am able to change the view asynchronously, so the user can navigate without having to explicitly invoke or change tool modes. It's a much more fluid experience, and with the exception of a few minor cases that I think I can work around, it doesn't disrupt tool operation.
Thank you for the useful tips, everyone. This is a really fantastic forum!