If the receiver can only accept very small chunks, you can put a rechunking stage in between the compression and iteratee:

-----------------------------------------------------------
verySmallChunks :: Monad m => Enumeratee ByteString ByteString m b
verySmallSchunks = sequence (take 10)
-----------------------------------------------------------

Resending is slightly more complex -- if the other end can say "resend that last chunk", then it should be easy enough, but "resend the last 2 bytes of that chunk you sent 5 minutes ago" would be much harder. What is your use case?