You should be able to ensure that the elements aren't moved by using the structures.onBeforeMoveElement hook in a plugin:
public function init()
{
craft()->on('structures.beforeMoveElement', function(Event $event)
{
$user = craft()->userSession->getUser();
if (!$user->isInGroup('allowedGroup'))
{
$event->performAction = false;
}
});
}
I've had a quick look through the source but I'm not 100% sure if this is also run when an element's parent is changed. I would think it is.
You could also create your own custom user permission that can be assigned to individual users or multiple groups for more flexibility:
public function init()
{
craft()->on('structures.beforeMoveElement', function(Event $event)
{
$user = craft()->userSession->getUser();
if (!$user->can('pluginName-moveElements'))
{
$event->performAction = false;
}
});
}
public function registerUserPermissions()
{
return array(
'pluginName-moveElements' => array('label' => Craft::t('Move Elements in Structures')),
);
}