The last caustics implementation I looked at (not this one) did the refraction stuff per-pixel in shaders based on a CPU-computed mesh deformation.
The more general answer to your question is that in fragment shaders, you can get "non-locality" via texture lookups inside the shader code.