The only executable format that NASM can output are either raw binary code, or a ".o" object file which is apparently an "elf" format file.
I'm not sure where you found this misinformation.
nasm -hf
will give you a list of the output formats that Nasm will produce. As you can see, there are quite a few of them. Most suitable for Windows would be "-f win32" (alias "-f win") or "-f win64". These do not, in themselves, produce an .exe - you will require the assistance of a suitable linker - "golink" seems most popular recently, but there are others.
"-f obj" will also produce an object file which can be linked into a Windows .exe, but it defaults to 16-bit code and you'll need to specify "use32" on each and every segment you define. I consider it an "obsolete" format, and would use it only if you're stuck with a linker that demands this format (Borland?). Better to get yourself a modern linker, IMO.
Nasm will - all by itself, no linker - also produce an .exe from the flat binary "-f bin" format, but you'd have to create an executable header "by hand" (there are macros available to ease this chore). This would be less flexible, since you'd be stuck with a single module, but it does work.
I'd advise you to stick with "-f win32" or "-f win64". The "elf" formats are for when you graduate from Windows.
Best,
Frank