This might be overkill for a 2D app, but the way you typically would do this for a 3D app is to make two vectors, a "far point," and a "near point," unproject them both using GLKUnproject or whatever other math library you want, then subtract the near point from the far point to get a ray in object coordinates which you can use to test for intersection using only the geometry without having to worry about projection or modelview matrices. Here's an example
bool testResult;
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
GLKVector3 nearPt = GLKMathUnproject(GLKVector3Make(tapLoc.x, tapLoc.y, 0.0), modelViewMatrix, projectionMatrix, &viewport[0] , &testResult);
GLKVector3 farPt = GLKMathUnproject(GLKVector3Make(tapLoc.x, tapLoc.y, 1.0), modelViewMatrix, projectionMatrix, &viewport[0] , &testResult);
farPt = GLKVector3Subtract(farPt, nearPt);
//now you can test if the farPt ray intersects the geometry of interest, perhaps
//using a method like the one described here http://www.cs.virginia.edu/~gfx/Courses/2003/ImageSynthesis/papers/Acceleration/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf
In your case projectionMatrix is probably the identity since you are working in two dimensions, and modelViewMatrix is the scales, translates, rotates, shears, etc you've applied to your object.
Also, in case you were unaware, what you are asking is often referred to as "picking," and if you enter "OpenGL picking," into Google you may find better info on the subject than what you might have gotten before with just "converting coordinates."