ソースXMLの一部だけ変更する、というのはXSLT向きでしょうか。
他は変えずに/x:abc/y:def@hoge の値だけを書き換えるとか、/x:abc/y:def/hoge にappendChildするとか。

出来ないことはないのかも知れませんが、上記の様なのにXSLTを使うのは適切でしょうか。

matchが、明示より*が強くて /x:abc/y:def だけ引っ掛けてあとはcopy-ofというのができず、悩んでいます。

priorityを明示すれば良いのかも知れませんが、それはまっとうな使い方でしょうか。
(*の方が強いのは理由があるのではないか、それに反するのではないか、と気にしています)