Robin,
Did you ever try recoding eveything to use DX8+? I think that is my next step in trying to get Non-XP to work the same way as my new changes....
But yeah, the Win98 DX data is just f---ed.
Yes, I tested with dx 8.0 code. But the dx data isn't that bad, just on a different scale than normal mice data.

FWIW, analog+ actually was first written in dx8, because I couldn't get headers/libs of dx7 that worked with mingw back then. I was mistaken to believing that I needed to code in dx8 because if I compiled with those dx8 headers with dx5/7 code, it compiled as if dx5 (ie: no multiple mice in win98).
Anyway, analog+ had options to use dx for multiple lightguns. The added options were for lightguns-dx7-relative-immediate and lightguns-dx7-absolute-immediate (although not called those names).
I tested dx8.0 code with the lightgun in-house, also. My testing the multiple lightguns included added code to mame that tracked min & max range (abs) and min & max delta (rel) for each mouse device found (including sysmouse), and output a rolling log to standardout. For the dx8 part, I rolled back in the older analog+ dx8 code back into the dx7 mame:analog+ code, seperated with
#ifdef _8.0 code_ #else _7.0 code_ and compiled two different exes. I tested with 2 actlab USB PC lightguns, older model, & a few mice. Most of the testing was on my winME machine, but I double checked on a win98 and a winXP machine.
Both dx7 & dx8 acted the same in winME/98; winXP was different than win9x in not seeing the individual mice/lightguns, but again dx7 & dx8 acted the same in winXP.
DirctInput Absolute Mode:
First the hacks needed:
*******************************************************
Setting the device to absolute mode in the enum callback function didn't take hold, it was still in relative mode. I hacked setting the absolute mode into the pause/unpause function, which worked.
*******************************************************
According to MS dx sdk, you need to initialize absolute mice every time you reaquire it (ie: after unpausing). That means to find/set the zero point, but this is only needed for non-absolute mice devices (aka real mice) AFAIK, see below.
The
system mouse 
in absolute mode didn't have any real 0,0 point to be absolute from. Using 32bit signed vars, I got in the negative 3-4 billion or positive 2 billion "mouse units" depending on which computer I used. (It was interesting that both X & Y axes were relatively close, +/- half a bill, to each other on the same computer, and the absolute number seemed to "stick between reboots.)
If I only used one lightgun & no other mice, shooting the screen keep within a ~64kbit range (example: -4,000,000,500 to -4,000,065,000), for both dx7 & 8. If I used a mouse, or tried two guns, this got screwed up, of course.

OTOH, the
individual lightguns in absolute mode worked pretty well. (Of course, winXP didn't let dx see the individual mice, so the following couple paragraphs are for winME/98 only.)
Again, the range was 64k, but now it was always from 0 to 65,535. Note: I never shot the extreme 0 or 65,535 ends, but since one pixel is about 50 to 125 of these absolute "mouse units" wide, depending on the resolution (ie: 65536 mu / 1024 pixels = 64 mu/pixel), I got within a couple dozen "mu"s of the ends, this was understandable.
I had to convert this down to mame's internal 256 analog range mame had at the time, which I think is why some games didn't like absolute mode. I'm guessing it was some combo of the lower internal mame resollution, the conversion to the game units, and maybe the orignal game thinking in relative mode. Mame's current 128k range won't have this problem, my guess.
FWIW,
USB normal mice using this absolute mode worked okay, too, with the following points.
1) The mice were like the sysmouse in that they had no "min max": the values depended on how long since last reboot and how much and which direction the mouse was moved before starting analog+,
2) Normal mice/trackballs had
much lower "playable" ranges than the lightguns, so I couldn't use a hardcoded 64k range if I wanted to be able to, say, play 2 players with one lightgun and one mouse.
3) And if you paused, moved the mouse, and unpaused, the values didn't match any more. This must be why MS dx sdk said to reinitialize after reaquiring mice. This meant I had to track the min and max, and reset them after each unpause. This did a few things:
a: you needed to "shoot the corners" with a lightgun or shake the mouse to set good min & max values, or else it was not accurate (lightguns) or way too sensitive (mice),
b: if you used a mouse, you could notice the sensitivity decrease as you played unless you
never went near the edge of the screen, and
c: made the code slower; very noticable on borderline computers like my 1Ghz athlon & area51 ATM.
DirectInput Relative Mode:
These test results were a little funny, and I still think I was missing something somewhere. But...
Individual lightguns had a max delta of ~32k "mu"s according to my code output (I never got all the way to 32767, for IMO the same reasons mentioned in absolute mode). This was not the 64k delta I expected for the absolute results above. However, if I coded for it to translate a max delta of 32767 into mame's internal 256 max, I only covered the upper left half corner. I could not figure it out why.
So I hacked the code as if mame's internal delta had a max of 128, or the lightgun's max delta was the 64k I expected.

Besides that, this function was coded a lot cleaner than my absolute code, so ran faster.
Sysmouse in relative mode also had the same 32k range, but again if I moved the mouse it "uncalibrated" the lightgun.
The nice thing about relative mode, both sysmouse and individual, was the guns could be sort of recalibrated by shooting the same edge of the screen the shots were learning to. The problem was that normal mice again much lower deltas, and I couldn't think of a clean way to let mice work like I did with absolute mode. It soulds like you have code that I think can be copied in dx, though.
Recap:
Setting the gun as absolute mode in the enum callback function did not work. I hacked it in later in the start up sequence.
Dx8.0 & dx7.0 code acted the same in immediate mode. I didn't test buffered mode.
WinXP & dx8 didn't change the system mouse only problem.
I did not test win2000.
Some reason some games liked relative mode better than the absolute mode, other games were the opposite, but hopefully this was due to mame's old input layout.
Sorry about the length, the slow answer, and not very clear writing. If anything isn't clear, or I didn't touch on something, please let me know.