No muy optimizado pero hace lo que quieres:
   Código PHP:
    function agruparNumeros($numeros, $rango)
{
  $result = array();
  
    foreach ($numeros as $numero)
  {
      $intervalo = array(
        $numero - $rango,
        $numero + $rango
      );
    
      $entras = array();
      foreach ($result as $clave => $results)
      {
        if (in_array($numero, $results))
        {
            continue 2;
        }
        
        $init = reset($results);
        $end = end($results);
          if (
            ($intervalo[0] >= $init && $intervalo[0] <= $end) ||
            ($intervalo[1] >= $init && $intervalo[1] <= $end) ||
            ($intervalo[0] <= $init && $intervalo[1] >= $end)
          )
          {
              $entras[] = $clave;
          }
      }
    
      if ($entras)
      {
        $entra_principal = $entras[0];
        unset($entras[0]);
          $result[$entra_principal][] = $numero;
        
          if (count($entras) >= 1)
          {
              foreach ($entras as $entra)
              {
                  foreach ($result[$entra] as $valor)
                  {
                      $result[$entra_principal][] = $valor;
                  }
                
                  if ($entra != $entra_principal)
                  {
                      unset($result[$entra]);
                  }
              }
          }
      }
      else
      {
          $result[] = array($numero);
      }
  }
  
  return $result;
}
 
function zerofill($numero, $longitud)
{
    $return = $numero;
    while (strlen($return) < $longitud)
    {
        $return = '0'.$return;
    }
    
    return $return;
}
 
function superorden($array, $rango = 30, $order = 'asc', $profundidad_order = 'full', $profundiad_rango = 'full')
{
  $numeros_grupo = array();
  $claves = array();
  $zerofill = 0;
  $profundidad_max = 0;
    foreach ($array as $clave => $valor)
    {
        foreach (explode(',', $clave) as $grupo => $numero)
        {
            $numeros_grupo[$grupo][$clave] = $numero;
            $claves[$clave][$grupo] = $numero;
            
            if (strlen($numero) > $zerofill)
            {
                $zerofill = strlen($numero);
            }
            
            if (($grupo + 1) > $profundidad_max)
            {
                $profundidad_max = $grupo + 1;
            }
        }
    }
    
    // order
    if ($profundidad_order == 'full' || $profundidad_order > $profundidad_max)
    {
        $profundidad_order = $profundidad_max;
    }
    elseif ($profundidad_order < 1)
    {
        $profundidad_order = 1;
    }
    // rango
    if ($profundidad_rango == 'full' || $profundidad_rango > $profundidad_max)
    {
        $profundidad_rango = $profundidad_max;
    }
    elseif ($profundidad_rango < 1)
    {
        $profundidad_rango = 1;
    }
    
    switch ($order)
    {
      case 'desc':
        $function_sort = 'arsort';
        break;
        
      case 'asc':
      default:
        $function_sort = 'asort';
    }
    
    $claves_global = array();
    foreach ($numeros_grupo as $grupo => $numeros)
    {
      if ($profundidad_order < ($grupo + 1))
      {
          break;
      }
      
      $dorango = $profundidad_rango >= ($grupo + 1) ? true : false;
      
          $order = array();
        foreach ($numeros as $clave => $numero)
        {
            $order[$clave] = isset($claves_global[$clave]) ? $claves_global[$clave].zerofill($numero, $zerofill) : $numero;
        }
      
      $function_sort($order);
      
      if ($dorango)
      {
          $medias = array();
        foreach (agruparNumeros($numeros, $rango) as $agrupacion)
        {
          $media = round(array_sum($agrupacion) / count($agrupacion));
            
            foreach ($agrupacion as $numero)
            {
                $medias[zerofill($numero, $zerofill)] = $media;
            }
        }
      }
      
      $claves_order = array();
      foreach ($order as $clave => $numero)
      {
          $claves_order[] = $clave;
          $i++;
          
          if ($dorango)
          {
              $numero = zerofill($numero, $zerofill);
            $numero = substr($numero, strlen($numero) - $zerofill);
            $claves_global[$clave] .= zerofill($medias[$numero], $zerofill);
          }
      }
      
        $return = array();
        foreach ($claves_order as $clave)
        {
            $return[$clave] = $array[$clave];
        }
    }
    
    return $return;
}
 
$array = array(
  '221,79,75'  => 3344,
  '162,50,40'  => 533,
  '213,63,53'  => 30,
  '87,58,24'   => 1073,
  '79,45,62'   => 1963,
  '143,89,7'   => 120,
  '208,100,18' => 29,
  '31,36,86'   => 104,
  '165,2,100'  => 70,
  '35,70,38'   => 82,
  '34,100,15'  => 27,
  '145,20,61'  => 2,
  '25,56,60'   => 3,
  '264,26,38'  => 1,
  '327,14,31'  => 2,
  '12,27,15'   => 1
);
 
print_r(superorden($array, 30, 'asc', 2, 1));