Maybe you could pass a tied filehandle to Net::FTP::hash() that could call
$mw->update() which would allow periodic updating of the window during transfer (update: which would take care of the transfer type but sidestep the extraction time issue).
You could also implement a progress bar this way.