Of course NASM can create Windows Apps! There are a few differences between NASM and MASM. 2 of the big ones:
1. NASM does not have high level macros like NASM
2. we use brackets around variable names to access the data
MyVar is defined as a dword and has a value of 123 and a starting address of 40000
MASM:
mov eax, MyVar ; eax == 123
mov eax, offset MyVar ; eax == 40000
NASM:
mov eax, [MyVar] ; eax == 123
mov eax, MyVar ; eax == 40000
there is no offset or addr operators in NASM. There are a quite a few differences, but one you learn them, NASM is a bit easier to use and understand.
If you want to go the route of macros and all (most) of the window defines, there is NASMX, take a look at that also.
I have written a few NASM tutorials, you can find them here
http://www.dreamincode.net/?p=kudos&kudosmember=495049MASM:
invoke MessageBox, NULL, offset Hello, offset Grrrr, MB_OK
NASM:
push MB_OK
push Grrr
push Hello
push NULL
call MessageBoxA/W
you would %define MessageBox box to be the A or W version.