Why on earth is iisnode trying to send my app.js file as HTML!? Yet every other *.js file it sends correctly as javascript. Examples:
iisnode in Windows Azure Web Sites is not trying to send your app.js back as HTML. It is trying to run it as a node.js application (https://github.com/tjanczuk/iisnode). You can find a reason for this in the web.config file deployed along with your Windows Azure Web Site application (you can inspect that config file by connecting to your site via FTP). It contains the following entry:
<handlers>
<add name="iisnode" path="app.js" verb="*" modules="iisnode"/>
</handlers>
The web.config entry above instructs IIS to redirect all requests for app.js to iisnode and therefore treat it as a node.js application as opposed to following the default behavior of serving it as a static file.
If you deploy your application to Windows Azure Web Sites without web.config, Windows Azure Web Sites will run a heuristic to determine the type of application and generate appropriate web.config file for it. Apparently in your case it determined it is a node.js application, hence it added the web.config entry above.
If you want to serve the app.js file as a static file, you have a two options. You can rename that file to something else. Or you can deploy a web.config file along with your application that does not contain the section above. You can use the web.config that Windows Azure Web Sites created for you currently as a starting point.