Do you know which triangle the point is in, and do you have access to the vertex data for that triangle (namely positions and UVs)? If so, this is a fairly simple problem, and is doable in the fragment shader on powerful enough hardware (it's going to be too math-heavy for mobile devices, most likely).
If you don't know which triangle to use, you have to figure that out first - which makes the problem a lot more complicated, and probably not something you can reasonably do in a fragment shader if there are more than a handful of triangles.
However, assuming you know which triangle you're in, here's how you'd do it. I won't write out the code explicitly, assuming you can fill in the details yourself.
Find the barycentric coordinates of the point, with respect to the triangle. These are essentially distances to each edge, but remapped to the [0, 1] range so that the coordinate is 1 at the edge and 0 at the opposing vertex. You can do it by calculating the plane equation for a plane perpendicular to the edge (use the cross product of the triangle's normal with the edge vector), then calculate the point's distance from that plane, then scale and remap it based on the opposing vertex's distance from the plane. Do this for each edge.
Use the barycentric coordinates to interpolate the vertex UVs. This takes the form of
finalUV = UV0*bary0 + UV1*bary1 + UV2*bary2
UV0, UV1, UV2 are the vertex UVs and
bary0, bary1, bary2 are the barycentric coordinates for each vertex (derived from the distance to the opposing edge as seen in step 1).