Re: BuddyPress as a school network
Your second, third and fourth requests can be taken care of by making sure the groups are set as Private. That means that they don’t show up in public listings, and their contents are only visible to members of the group.
In order to make sure that people can only be part of a single group, you’ll want to hide the Send Invite screen for all users, or at least for non-admins. You could either do this through CSS, or by modifying/reproducing the functionality defined at bp-groups.php groups_setup_nav().
As for the first question, there are WP plugins that allow you to restrict membership to invited members. A ten-second Google search turned up this: https://wordpress.org/extend/plugins/wp-invites/, for example. I imagine that this would work fine for BP as well. The most straightforward way to populate groups would then be for the admin to use a plugin like BP Group Management http://teleogistic.net/code/buddypress/bp-group-management/, which allows admins to place people manually in groups, bypassing the invitation process.