Only allow certain non-admins to send private messages

Yes, you would indeed have to lock the trust level.

Due to the way Discourse is designed, all functionality is available via the API.