Our handling of installing requirements are pretty inconsistent. We have the Titanium SDK Updater which checks on startup for updates to Titanium SDK, titanium CLI, alloy, and acs. But we also have separate IStartup checks for acs and alloy. Additionally our check for Node is done entirely separately.
Ideally we'd have the check for updates always run regardless of prefs. And we should have the notion of required installs versus optional (so user can ignore updates that aren't required, but must install/update required things).