I had set this problem aside while I worked on some other things, but now that I've come back to it, I found a solution. So for anyone who needs something similar, here it is.
Using dzEventsMagic, I hooked event #512 (WM_MOUSEFIRST) then simply read off the lParam when the event is fired. lParam is a 4 byte value where the low 2 bytes are the X coord and the high 2 bytes are the Y coord. This will detect a "click through" of an enabled label on the form/panel that is hooked. (Note that the desktop version will detect a click through only if the label is DISABLED, while the device version will detect on ENABLED labels only)
Code:
' Create a form "form1" including a panel "panel1" and a label "label1"
' label1 should be parented to panel1 and placed inside panel1
Sub App_Start
' dzem is a dzEventsMagic object
dzem.New1("Panel1", true)
dzem.Hook(512) 'WM_MOUSEFIRST
Form1.Show
End Sub
Sub dzem_MagicEvent
'yes i know this is ugly, should use bitwise functions
label1.Text = Int(dzem.lParam/65536,0) & " x " & dzem.lParam-Int(dzem.lParam/65536,0)*65536
End Sub
Sub Form1_Show
End Sub
Sub Form1_Close
dzem.Unhook(512)
End Sub
Clicking on the panel (or the label) will show the clicked coordinates within the panel. (Again, note that if on the desktop, the label must be DISABLED for this to work properly. On the device, the label must be ENABLED)
So back to my original problem. I can simply make a panel for each "row" of data, fill it with appropriate labels, and hook the entire panel to detect clicks on that panel. Then move/hide the panels as necessary based on the scrollbar and I now have a custom made scroll box.