Using one pyaudio stream for both data reading and writing
be aware of the fact, that, as far as I know, reading stream data is kind of generator process. Once you read it, you lose the data - In other words: based on your chunk, you basicly by every 'read' move a pointer that grabs your binary data.
Answer
Why dont you create 2 threads with 2 streams? Dont be afraid of streams. You can initialize as many as you want.

1 thread receives binary data and push them into stream(from client to your sound device)
2 thread receive data from your input stream (in binary form from your mic) and you push them to your client?

I am working now little bit with PyAudio and streaming is quite interesting but hard to understand from programming point of view. You can actually create 2 output streams into your headphones and somewhere in a hardware on the way to your headphones the streams sum up themselves so you can simply listen two sounds in the same time. 
NOTE:
Also I wanted to say that you dont have to be worry about using threads. The streams works in batch, not in realtime. Whether it is read or write, it works in the way, that you have binary data which you push in a stream and you are done. Hardware accepts the binary data, stream them and only after it finishes, then the stream asks for another data. So if you have sample_rate 44100 and chunk 22050(just example), your loop will be just 0.5s. So you dont have to be even worry about overflows, too much data to handle or your threads getting crazy. 
In fact, the moment you push data to stream, your python waits for your hardware to finish the job. Its very leightweight.
I have a web-socket client which sends audio binary data in the request and receive them as a response from the web-socket server. I am using pyaudio to read binary audio data from (file/microphone) which I then sending to the server. Then  as the response I receive another binary audio data from the server. The question is can I use my recently opened pyaudio reading stream to play receiving audio in real time or I better need to create another pyaudio stream (Have two streams where one is responsible for binary data reading and another for binary data writing)?