If you loop along the curve looking at adjacent pairs of points and compute the slope of the line joining each pair there will be a sudden jump when the curve changes direction sharply.
If the points are close together you might have to worry about numerical instability. Maybe pick points on the curve further apart. You might also have to worry about (nearly) vertical tangents. I think that's a solvable problem too.
Perhaps calculate the angle between successive secants rather than successive slopes. That means no division, so no division by (close to) $0$.
You could take pairs of points a little farther apart in a first pass. When you identify the region with the cusp calculate more accurately there to find the actual point.
Edit in response to comment.
Using the bearing is possible - but calculating it when the direction is close to vertical might be a problem. You are probably better off watching directly for a change in angle between successive secants. To do that use the dot product.
At this point it probably makes sense to code up some possible algorithms and try them out on a variety of examples. That will give you a sense of what might work.