A nice first approximation extension of the billiard ball model is to look at a stalled wing in comparison to an un-stalled: the down side will continue to "deflect the balls" just fine. But while the un-stalled upper side of a wing will also draw air downwards in an orderly way, the stalled upper side pulls a tail of vortices forwards. Not strictly a billiard ball model anymore, but even the crudest model of turbulent flow is enough to get the general idea.
The purpose of an airfoil, in this approximation, is giving the pulled air a longer, gentler acceleration compared to the short peak of acceleration a flat wing would require at the same angle of attack. You won't be able to calculate optimal airfoils with this model, or even a winglet, but it's good enough for many of the usual little riddles like symmetric airfoils, inverted flying etc.
The purpose of an airfoil, in this approximation, is giving the pulled air a longer, gentler acceleration compared to the short peak of acceleration a flat wing would require at the same angle of attack. You won't be able to calculate optimal airfoils with this model, or even a winglet, but it's good enough for many of the usual little riddles like symmetric airfoils, inverted flying etc.