Si te referis al tamaño (y no a la cantidad de dimensiones) podes hacer esto:
int numero = 30;
POINT *xgy = (POINT*)malloc(sizeof(POINT) * numero);
xgy[0].x = 2;
xgy[1].y = 3;
free(xgy);
Una funcion devuelve un numero entero (un DWORD,cuatro bytes), por lo que podrias devolver el puntero al primer elemento del array (matriz).
Si queres saber como funciona la devolucion de valores de una funcion te recomiendo este tutorial que escribi :
http://www.c0d3rz.com.ar/foro/viewtopic.php?t=53