First, delete the version I emailed to you and install the ActivationEmail package in Package Manage. I think there may have been a bug in the deactivation section of your version.
Since it isn’t a snippet, there’s no way to use it as a hook -- but it will still be called whenever a user is saved to the DB, though it ignores users who are being saved for the first time (i.e., created).
Here’s what it does from the inside. Whenever a user’s active status (or anything else) changes, the user will always be saved to the DB -- otherwise the change wouldn’t be permanent. The ActivationEmail plugin is only called when a user’s record is saved to the DB. The code will execute if and only if an existing user’s record is updated in the DB. If the users status is changing from inactive to active, the users gets one email. If the deactivation option is on, the user will get a different message if their status is changing from active to inactive. If their active status is not changing, the plugin does nothing.
As you said, the Register snippet sends its own email to the user on registration (and I think another one when they self-activate). If you don’t want users to be able to self-activate, I think you’d just install my package and change the other snippet’s Registration Tpl chunk so it tells the user you’ll be activating them manually and remove the self-activation link/placeholder in that Tpl chunk. ActivationEmail will send them an email when they’re activated manually later.
Hope that makes sense.