Si la función devuelve un único registro, entonces:
WITH cte AS (SELECT 1 a, 2 b)
SELECT my_function(a, b) FROM cte;
trabajará. Sin embargo, si la función es un SRF (función de retorno de conjunto), entonces necesita usar LATERAL para que la base de datos sepa que desea alimentar los resultados de las tablas anteriores en la declaración JOIN a las funciones más adelante en el UNIRSE. Esto se logra así:
WITH cte AS (SELECT 1 a, 2 b)
SELECT * FROM cte, LATERAL my_function(a, b);
LATERAL hará que PostgreSQL tome cada fila del CTE y ejecute "my_function" con los valores de esa fila, devolviendo los resultados de esa función a la instrucción SELECT general.