Hola Julián.
No tengo la computadora ahora.
No estoy seguro de entender tu duda.
El match es para hacer análisis de casos en una definición, usando los constructores del tipo de dato (si es nat: 0 y S ; si es una lista: nil y cons, por ejemplo).
El struct es para fijar el parámetro a ser chequeado en una recursion, para ver que estructuralmente es mas pequeño (constructivamente).
Podrías tener funciones recursivas como la igualdad (que retorna un bool) entre listas o naturales, donde es necesario hacer análisis de casos en los dos parámetros pero donde alcanzaría con chequear (uso de struct) la terminación en uno de ellos.
Por otro lado, podes hacer strcuct x, y luego match x en la definición. No entiendo lo de la y...
Si esto no resuelve tu consulta, volvé a escribir.
Saludos Carlos