non avevo fatto caso al fatto che usassi variabili globali... allora la versione che ho fatto io (ricorsiva) non va bene...

codice:
void eliminanumero()
{
        int dato;
        printf("Che numero vuoi eliminare? ");
        scanf("%i",&dato);
        paux = p;
        if (paux)
            while (paux->pun != NULL)
            {
                  if (paux->pun->numero == dato)
                  {
                     paux2 = paux->pun;
                     paux->pun = paux->pun->pun;
                     free(paux2);
                     break;
                  }
                  paux = paux->pun;
            }
}
dovrebbe funzionare...