Hola ferchando.
La función prm devuelve un float y en la llamada y display con el printf pones %i que es un integer, cambialo para un float.
esta:
printf("\n\t\tSu promedio es: %i",prm(lim,cal));
por esta, solo cambia la i por la f:
printf("\n\t\tSu promedio es: %f",prm(lim,cal));
Por otra parte en la funcion prm tienes el return dentro del for, por lo cual en el primer pase del bucle retorna, debes poner el return despues de las llaves, cuando termine de hacer los calculos de las sumas de los valores de cal[].
Y por ultimo si devuelves el resultado de suma/numcal, al ser los dos datos int, devuelves un int, sin decimales, declara una variable float y asigna la division o return (float)suma/numcal;
int i, suma = 0;
for (i=0;i<numcal;++i)
suma += cal[i];
return (float)suma/numcal;
Un saludo.