Flashing is performed in “recovery mode”, and this mode simply causes the Jetson to temporarily show up as a custom USB device. That USB device is understood by the “driver package” (which is something JetPack is a front end for), and without this no flash is possible. The driver package runs only on a Linux desktop PC architecture. The front end (JetPack/SDK Manager) has further limitations (such as working with Ubuntu 18.04 host PCs, but not most other “flavors”/“distributions”). So it is not possible to flash without a Linux host PC, preferably an Ubuntu 18.04 host (in future distributions of JetPack/SDK Manager this will likely require an Ubuntu 20.04 host PC).
By far the best result is if you set up dual boot with Linux and Windows. You’d just need to make sure your disk has enough space since flashing consumes a lot of space (flash essentially creates content equal in size to the SD card or eMMC content on the Jetson before transferring it to the Jetson).
Some people do use a VM, but this is not supported since it has a lot of issues.
Flash is what you would want to do to get beyond Ubuntu 16.04. Newer releases put on Ubuntu 18.04. The next major JetPack/SDK Manager release will probably support flashing Ubuntu 20.04 to the Jetson (which is why the host PC will need to be 20.04).
The normal requirement is a host station running Ubuntu, and the program running on the host is JetPack/SDK Manager (SDKM is an extension added to JetPack, you could refer to it as either JetPack or SDKM these days). Then the Jetson must be connected via the micro-B USB at the Jetson side, and to any regular USB connector (a type-A) on the host PC. The USB is the only way available for flash software to work through flashing. In some cases a newer release can be network upgraded, but I doubt anything still running 4.4.38-tegra is one of those.