La diferencia entre función y procedimiento es como bien han explicado, que la función devuelve un valor del tipo que sea y el procedimiento no devuelve ningún valor implícitamente. Esto le da a las funciones la posibilidad de ser utilizadas donde se utilizarían las variables, además puede ser útil para otras cosas...como por ejemplo el control de errores (devolver un código que especifique el error producido por la función).
Pero todo lo que puedas hacer con una función lo puedes hacer con un procedimiento, tan sólo hay que pasar por parámetro una variable más que almacene el valor que devolvería la función.
ejemplo
Funcion suma devuelve el valor de la suma de los dos parametros de entrada x e y:
resultado := suma(x,y) + 10 ;
Procedimiento suma calcula la suma de los 2 parametros de entrada x e y, y lo almacena en la variable z:
suma(x,y,z);
resultado := z + 10 ;