Hey Tom,
I'll answer your questions in the reverse order:
It appears LimeLM would do what I need (key management, revocation, time-expiry, etc.) but requires dll files to be included into an installer, rather than me being able to just make some calls from node.js when I want to check if the user is authenticated to use the software.
You can use TurboActivate / TurboFloat from your installer and/or from your app. Since you're using Node.js then you'll have to use an extension like Node.js Foreign Function Interface in order to make the TurboActivate / TurboFloat calls from your application.
The best place to start is with the C APIs (TurboActivate C API article, TurboFloat C API article) and the actual C headers (TurboActivate.h / TurboFloat.h).
Licenses should be able to be added to (increase X and Y), revoked (so the software stops working), and expire after a year without the customer needing to do anything after purchasing from us (I believe LimeLM handles all of these).
Yes, you can do all this with LimeLM.
Tell me if this helps, or if you have any other questions.