Ok Robin, get ready for some insanely stupid questions from someone who is not totally in the groove with what you are saying... ok ready?
Pretend you are in a real arcade, and you start playing a real lightgun game, say Area 51. When you want to reload off-screen, you are pressing the *trigger* (MAME would typically assign this to button 0) as you aim the gun outside of the visible playing area. So why on earth would MAME want to do anything so hacky as to simulate this condition by forcing a mouse button to act this way?
If the PC lightguns acted like arcade guns, mame wouldn't need the hack. But they don't, so mame does.

With PC lightguns, when you pull the trigger while pointing off screen, the
lightgun sends the windows a
second button press with the last onscreen location the trigger was pulled. This (AFAIK) is done in the PC lightgun's hardware, far before the input gets to mame. The hack in mame un-does what the PC lightgun does, to simulate the real arcade lightguns.
BTW, that behavior is a
bug "feature" of all PC lightguns AFAIK.
By the way, you were right about the mouse buttons in previous postings being borked - I'm pretty sure they were all buttons 0 and 1. Sorry for the confusion.
No problem. It threw me for a little while. Ya, that's my excuse on why I didn't think of the cause myself.

Slightly off-topic - shouldn't there be a way with MAME .112 to turn crosshairs off by default, without doing something like creating transparent bitmaps? I could do this, but I think a solution involving a command flag would be more elegant.
Aaron has a dislike for too many options. [shrug] In coding (the little I do), I agree; too many options makes it that much easier for someone to mess it up, harder to up keep, etc. OTOH, as a power user, it would be nice to be able to set anything to anything I wanted (which is why I like messing at the code).
There are a few ways you can get around the crosshairs thing. The easiest is just pressing F1 at the start of each game.

Almost as easy, and do once and forget it too, is the transparent pngs you mentioned.
Or you can edit the source and recompile. If you
know you don't want crosshairs ever, just go into the drivers folder and delete all "
PORT_CROSSHAIR(*,*,*,*)", where those '*'s are anything except ',' or ')', aka "comma" and "right parenthesis" respectively. Or if you just want to change the default, edit line 1200 in src/emu/video.c to "
crosshair_visible = 0;".