But was it actually necessary to buy Windows-specific tools?
As usual it depends on the value of 'actually necessary' used.
Strictly all that was needed was a linker producing NE (Windows) binaries. Of course, when calling Windows functions (hard to avoid) its calling convention needs to be satisfied. So either some wrapper libraries where needed, or low level code had to be added to do do the calling, or just change your style to do so (as I did with assembly (*1)).
If you programs were already nicely modularized (read: used external symbolic addresses for linking), then switching to programming for Windows wasn't a big deal.
*1 - Yup, my first Windows programs were written in assembly - as most stuff I did :))