The grread function will pause to detect user input and will return a list of data pertaining to the type of input received [e.g. a return of (3 (123.0 456.0 0.0)) indicates that the user has left-clicked the point (123.0 456.0 0.0)]. However, whilst pausing to detect input, all standard drawing aids are disabled (e.g. Object Snap, Polar Tracking, Orthomode etc.). Hence, when calling the grread function within a while loop, such drawing aids are continuously disabled within the loop.
Orthomode can quite easily be imitated by manipulation of the cursor coordinates based on the X & Y values of the cursor position; however, the only way to achieve Object Snap functionality within a grread loop (that is, without resorting to ObjectARX as used by DynDraw by Alexander Rivilis), is to use the osnap AutoLISP function to continuously attempt to snap the cursor position using the active Object Snap modes, and display a grvecs/grdraw vector to imitate the Object Snap symbol on-screen.
Here is one example of such an imitation, and here is another.