You could do it all in just one callback function, but it might sometimes get a little messy and complicated because the function might have to decide which window it was being called for. Yes, the window handle is passed to the callback function, but that might not be enough to distinguish between dialogs or controls.
The macros CALLBACK and WINAPI should be used because (1) they are Microsoft standards and (2) if Microsoft decides to change the macros then you will be SOL if you didn't use them. The same with using int instead of HANDLE -- 64-bit programmers will find out very quickly when they begin to migrate their 32-bit windows programs to 64 bit if they did not use standard Microsoft macros because the size of the HANDLE object was changed.