I'm not sure how glutBitmapCharacter works, and these results are very weird indeed. Somehow it must treat each letter as an unclippable entity, which is weird.
I used to render text to the screen the old-school way and it works without problem. That is, create 256 display lists, each rendering a unit-size rectangle with the corresponding letter bitmap in the font-file, except for carriage return, space, tab, newline, etc. for which you do some model-view matrix operation instead (for example: for carriage-return you pop the matrix, for new-line you translate down by 1 unit, for space you move left by 1 unit, so on). Once the display lists are done, all you have to do in to render a string is apply the proper translation, rotation, projection, scaling and do "glCallLists(strlen(your_string),GL_UNSIGNED_BYTE,your_string);", et voilĂ ! No clipping problem or whatever else. And it's pretty fast since it's a display list.