One more idea, not sure you would want to modify LWP (or subclass it if possible...)
You would probably need to make LWP use non-blocking sockets and also use select(). You would then have to do your own timeout loop and callback into your program to that you could call Tk::DoOneEven(ALL_EVENTS) to ensure the GUI keeps ticking
Probably not too hard if you know socket communication, but likely not simple ;-)