I'm working on something similar at the moment. Not a complete answer put some thoughts:
Have you considered that the Uno is a 5v board and the ESP32 is 3.3v? You may need a signal level shifter (there are many to chose from) something like Pololu-2595 which is breadboard friendly.
There's a good ESP32 I2C explanation at Random Nerd Tutorials.
There is an open source project that will do what you want.
The com0com will create virtual com ports for the programs to connect to.
The hub4com will allow you to route data between the physical port and multiple virtual com ports.
You can't. Putty has no way of disconnecting without closing the program (as far as I can tell).
You could try "Tera Term" which apparently (though I don't use Windows so have no experience with it) has a disconnect option (which you would have to use before uploading).
Alternatively, as @Juraj has mentioned, you could use a separate USB to TTL ...
After trying many different alternatives, it turns out that my mistake was that, foolishly, I had included Serial printing inside my ISR routines, which where accessed when my interrupt fired, in order to wake my uP. As a result, Serial.print was called, with Serial being closed (before issuing the Serial.begin command to restart it), thus breaking my uP.