When using the secondary UART in MicroPython, the primary UART (DIN/DOUT/RTS/CTS) pins still function as normal. The secondary UART is totally separate from the primary XBee UART. Note that pins 17 and 18 can be configured as the flow control pins for the secondary UART, and it's best practice to use hardware flow control with UARTs.
Pin 7 can be used as a GPIO, but as you say, make sure to add a switch or something similar that would allow you to use pins 7 and 8 for USB access to the cellular modem in case it's needed for updates. (USB access also requires enabling USB Direct mode on the XBee.) In that case, pin 7 would only have to be used as USB D+ function during the update, and can be changed back to GPIO after.
Note that if it's possible to unsocket the XBee for updates instead of doing them in-place, you could skip adding circuitry for USB. Also, USB access is not needed for _every_ XBee 3 Cellular firmware update - only if the cellular modem needs to be updated, which happens infrequently.
If you don't require RSSI PWM output or the association LED indicator, pins 4 and 15 can be used as IO. Likewise, if you don't need pin sleep control, pin 13 can be used as IO.
I hope this helps.