Hmm, are you sure? My test case seems to work.
I edited email:watched_forum_reply
and replaced the subject tags with:
[code=html]<xf:macro template="thread_forum_macros" name="subject" arg-thread="{$thread}" />[/code]
Then I edited email:thread_forum_macros
and added:
[code=html]
<xf:macro name="subject" arg-thread="!">
<mail:subject>
{{ phrase('reply_to_watched_thread_x', {
'title': prefix('thread', $thread, 'escaped') . $thread.title
}) }}
</mail:subject>
</xf:macro>[/code]
And the email was sent and the subject was displayed correctly.