refuncion(&pnum);
Con eso estás pasando como parámetro la dirección del puntero, es decir, un
int** (dirección de una dirección).
Sin embargo, en la función esperas un
int&. El uso de "&" antes de una variable es diferente a su utilidad después de un tipo. Para que esto compilase, deberías pasarle a la función "*pnum" (es decir, un int). "int&" es una referencia a un int, es decir, lo que le hagas al parámetro "ref" será como hacérselo a "*pnum".
Aunque este código compile, habrá un error, y es que al hacer "*pnum = 5" estás diciendo que "la variable a la que apunta "pnum" se establecerá a 5. El problema, es que "pnum" no apunta a ninguna variable.
Puedes hacer este cambio:
int num = 5;
int* pnum = #
// ...