I'm pretty sure you'll not get user preferences in the nodelets for quite a while (if ever). Nodelets are rendered on every page load and so are best when they can be cached. And cached nodelets can't be user-specific.
Your caching for best/worst nodes is quite nice but it still reads quite a few records out of the database. Doing that 4 times for every page load would probably end up with more DB load than we had before your work.