Devi lavorare per riferimento e non per valore. Modifica così:

Codice PHP:
<?php
$keys 
= array('a','b','3','d','e','f','g');

 function 
recover(&$array,$index,$offset)
 {
    
    
$ch='';
    
$len count($array);
    
    
$index=$index+$offset;
    
    
//elimino l'elemento in quella posizione
    
if(abs($index)>=$len)
    {
        
$pos $index%$len;
    }
    else
    {
        
$pos $index;
    }
    
$ch $array[$pos];
    unset(
$array[$pos]);
    
$array array_values($array);
    return 
$ch;
 }


print_r($keys);
echo 
"
"
;

$a recover($keys,'3','0');
echo 
$a."
"
;

print_r($keys);
echo 
"
"
;

$b recover($keys,'3','0');
echo 
$b."
"
;

print_r($keys);
echo 
"
"
;
?>
Se noti, ho aggiunto & al parametro in inputr alla funzione. In tal modo lo passi per riferimento e non per valore e le modifiche apportate nella funzione si ripercuotono sull'array originale.