Come ti è stato già detto, array_rand, restituisce n chiavi ( generate in modo casuale ) corrispondenti agli elementi di un array.
Quindi il comportamento dello script è corretto, anche se non è quello che desideri.
Ciò che devi fare è recuperare l'elemento dell'array che corrisponde all'indice.
Intituivamente, dico che potresti usare array_map per trasformare le chiavi nei rispettivi valori:
Codice PHP:
$stringa = $_POST['nomi'];
$lista = explode(' ', $stringa);
echo implode(' ', array_map(create_function('$v', 'return $GLOBALS[\'lista\'][$v];'), array_rand($lista, 2)));