Como notó correctamente, no puede ver las filas modificadas en el CTE en el SELECT principal . Este está documentado
:
Entonces deberías usar RETURNING .
Supongo que la forma más sencilla sería no usar una función, sino realizar json_build_object en la consulta principal y hacer que opere en los CTE parents y children .