To write the string "foo" into the memory address 0xdeadbeef:
w foo @ 0xdeadbeef
To write the hex 0x41414141 to the memory address 0xdeadbeef:
w \x41\x41\x41\x41 @ 0xdeadbeef
I recommend also taking a look at the various options for writing using the command w?.
You can load the file as raw, using -n or -nn option and then you will have those structures available at 0x0.
r2 -n ./open-wsl.exe
It also contains some function to operate and print on those structures in a nicer form. Check the pf? group for more info.
It might be due to different algorithms used for analysis or different options set for those. r2 (as well as IDA and Ghidra) has multiple options that can influence how the code is analyzed and how the functions (and other elements) are being recognized.
In this case, png_write_rows, as far as I can see, this function is not called anywhere in the lib and ...