It is theoretically possible to refill it with the phone. You either have a stored value card where the value is stored on the card and have the phone's NFC talk to it, or you store the value in a server that has an API to add value and have the reader at the subway deduct the value from the server.
I think Oyster cards are still stored-value based, but I suspect that either the backend servers and connections are now fast enough to poll pending top-ups in real time, or they just fan out the pending top up dataset to all turnstiles.
I remember using that feature in the SF bay area, and while it took a day for the top-up to actually propagate to all readers, it even worked on buses, so they must be uploading that data everywhere.
That type of connection needs to be there in any system that supports lost/stolen card value recovery, in any case, since that's how card block lists are distributed.
TfL likely need that mechanism primarily to synchronize the list of blocked open-loop bank cards with unpaid balances to all readers. Faster Oyster transaction list updates and any-station remote top-ups are probably just a side effect of that.
Clipper doesn't (yet) support open-loop bank cards yet, so for them, it's probably enough to update more remote readers every time the bus goes back to the depot, for example.