Hi,
I think you should not try to avoid flushing. Rather you should try to switch channel once the interface is "free" from pending packets.
The effect may be as well the sign that there's an issue on how you're trying to simulate the channel switching, and another one about what you should avoid in a real implementation.
Now the discussion goes technical...
A WiFi radio has internal buffers at MAC level. These are hardware buffers, mostly used to speedup transmission and perform frame aggregation. If you switch the interface channel, these will become invalid and will be flushed. This is because WiFi assumes that if you switch channel it's because you switched AP, and the queues in the AP and the STA are going to be messed up.
Since you're developing something non-standard, you have to take care of these elements. One way is to delay the switch 'til the interface buffers are empty. I.e.,
1) stop accepting packets / put the incoming ones in another buffer
2) wait until the buffers are clean
3) switch channel
4) accept new frames from the upper layer / put the buffered packets in the interface.
Design... it's a matter of design.
T.