I've tested this and here are my conclusions:
If you have :
translation:
| - sub :
| | - messages.en.xlf (with message = 'message in sub')
| - messages.en.xlf (with message = 'message in translation')
{{ 'message'|trans }} // echo 'message in sub'
{% trans_default_domain 'messages' %}
{{ 'message'|trans }} // echo 'message in sub'
{% trans_default_domain 'sub/messages' %}
{{ 'message'|trans }} // echo 'message' -> don't translate (it's your problem)
To resolve your problem you can rename the files in sub directory
translation:
| - sub :
| | - submessages.en.xlf (with message = 'message in sub')
| - messages.en.xlf (with message = 'message in translation')
{% trans_default_domain 'submessages' %}
{{ 'message'|trans }} // echo 'message in sub'