What happens to witness blocks after they are broadcast to other witness nodes? Are they kept or forgotten after some blocks?
Pruned nodes forget blocks after a while after processing. However, this is independent from whether those blocks have a witness.
SegWit does permit a half-pruned state, where witnesses are removed but the rest of the block is kept. That state is enough to serve lightweight nodes (which don't care about witnesses), but not enough to serve other full nodes. As far as I know, no full node software has implemented that half-pruned state.