CiviCRM has an option for groups in the group settings to make the group "Reserved". You can use this setting along with the CMS permission "CiviCRM: administer reserved groups" to limit who can edit a group.
For more information, here are some good docs: http://book.civicrm.org/user/current/organising-your-data/groups-and-tags/
Another way to control who can create groups is using hook_civicrm_buildForm and warning/redirecting the user to another page if they don't have certain permissions. See code snippet below.
function memberperms_civicrm_buildForm( $formName, &$form ) {
if (strpos($formName, "AddToGroup")
and
!CRM_Core_Permission::check('edit all contacts')
) {
// Display Error Message
CRM_Core_Session::setStatus("Sorry, the group feature is not currently supported for members", "Permission Denied", "error");
// Redirect to civicrm home
drupal_goto("civicrm");
}
}