Upstart plus monit works quite well to get everything running at boot time and keep node processes up. Plus you can use npm to install them. Here's a tut.
I'm not sure why supervisor would need to run at boot (logically, the only time you'd need this is while you're uploading new files), but I'd imagine it could be started at boot by just creating a new upstart config (using the same tut above for a foundation):
#!upstart
description "myapp supervisor"
author "you"
start on startup
stop on shutdown
script
echo $$ > /var/run/supervise_yourprogram.pid
// does it need root access? if so...
// exec sudo -u username supervisor --restart-on-error myapp.js
supervisor --restart-on-error myapp.js
end script
pre-stop script
rm /var/run/supervise_yourprogram.pid
end script
I'm not sure you would need monit for this case, since supervisor has its own --restart-on-error.
And here's a whole different approach, using a wrapper, which you would invoke instead of your app.js. It looks quite interesting.