Jean-François Lamy:
Can you elaborate on how the refresher works ? I don't understand why the progress indicator hack is even necessary
To be truthful, I'm not entirely sure what the technical reasons to the requirement of this kind of a component, either. That's something the DEV team could explain.
But my guess is that Vaadin assumes that for each change in the server side, you have first triggered an event in the client side (say, pushed a Button). During this roundtrip, the server side changes its state, and returns the required changes for the client as an UIDL. Now, in a self-contained, long-lived thread, you may have server-side changes that aren't triggered by the client side (say, percentage complete of a calculation, a typical use for the Progress Indicator). Because Vaadin (or, HTTP, rather) lacks server-side push, you need a component to actively poll for server-side changes at an interval.
Because the Progress Indicator was the only component that had any kind of polling mechanism built in, users were forced to use the PI even if they wanted to listen to autonomous server-side changes. Because the PI is a visual component, if you only want a poller, you needed to try to hide the visual representation by various CSS tricks. The Refresher, on the other hand, has no visual representation, it's only a component that repeatedly asks the server whether any changes has happened.
Technically, the Refresher is a Progress Indicator without the progress bar

Hope that cleared up things a bit (without being factually incorrect. DEV?)