If you compare to another sever like Apache which supports dynamic modules, adding a single line in a configuration file (or at worst dropping a .so in a folder, followed by adding a line in a configuration file) is much less work than retrieving gcc and friends and rebuilding a .deb.
Dropping a new nginx binary and live-migrating to it takes as much time as doing the same on Apahce with a new .so
Have you ever actually used nginx? I compile it from source with much-less-than-everything for security reasons (e.g., no proxy, no email, no ssi, no ssl, not any of the other ten modules that come by default), and in the 3 times that I needed a module later, it was a quick ./configure;make;make install;kill -SIG2 (or whatever the signal is to switch to a new version), which was not more painful than I remember from my apache days of 5 years ago.
I count 67 different modules in /etc/apache2/mods-available. Which means you rarely a new .so. On the other hand, Nginx is much more limited in functionalities out-of-the-box.
How do you handle deployment of your custom nginx on several boxes?
The same way I handle deployment of everything else. The binary is just one file (/usr/sbin/nginx). Distributing config and restarting processes is the same as with apache.
(My recent nginx deployment have 2 machines, so I do it manually, but in the past, I had a homegrown solution that would pull files from version control, and if they changed, asked the binary to restart)