The USB reset is done via the TTL side of the chip.
Arduino’s use DTR to bump the hardware RESET line as a reset - to kick the bootloader at startup time.
What I do, is carefully use the WDT to force a restart - which may be better in some cases, as the hardware is not completely cleared, and your program may be able to pickup almost where it left off.