I think that is by design, but I’m not completely sure. I think the client tries to maintain its own thread ID as long as the conversation is going. Looking at the code I see the following:
ChatManager (100-120) => It first tries to look up a message using the thread ID of the received message. This would return nothing, so then it tries to find a matching chat using the From User ID. This would find your original Chat object, so the message is given to that chat.
Chat (162-171) => The chat object explicitly overwrites the thread ID of any message that it receives to match its original value.
So I think these are your options:
1.) Just send a message without maintaining a reference to the Chat object, then the incoming response would look like a new conversation to the receiver, which would cause a new Chat to be created with the new thread ID.
2.) Change the Smack code referenced above in the Chat object to not overwrite the thread ID if the message already has one.