If you have more than 2 issues here, it wasn't clear what you were saying in the 1st paragraph.
As for setting the the position of the scroll bar, it looks like the docs weren't updated to mention scroll for the -c switch, but you can move the square to the desired position like:
/did -c Dname ID Number
... where number is a value within whatever range you defined
As for moving the visible area of a dialog list control, the only way I'm aware of is similar to the kludge needed to do the same thing in a @listbox using /sline.
You can use /did -c Dname ListID LineNum to shift the view of a List. If N is a line above the display, it shifts the display to place line N at the top. If N is a line below the display, it shifts the display enough to show line N 'sorta' at the bottom. Depending on the dimensions of the list control, there can be a partly-visible row at the bottom of the listbox, so if N is that partly-seen row, the display shifts just enough to make it be fully visible. If N is a line that's already in the display, the view doesn't shift.
Since this method selects a row, you would need to uncheck the line with -u like:
//did -c DName ID 1 | did -u DName ID 1
But you now have a problem in that any currently selected line is no longer selected, and you can't reselect it without potentially moving the display back to the other line. Unless N was already the one selected, in which case you wouldn't uncheck it after using it to shift the display.
So now your .sel property needs to reside in a variable or hashtable, and you can't re-select the original selected line until it shifts into view, but you have no way to know when someone uses the listbox's scroll bar to make it visible. So if the user sees their selection is no longer selected, so they click on it - should you treat that as if it's an unselection or a re-selection, etc.
And it gets even messier if you're using extsel options and the user has selected several lines. And even more messier with multsel, where you could have multiple .sel and .csel to track.
Note: I'm also testing a little bit with scrolling to the bottom then doing:
//did -c DName ID 1 | did -u DName ID 1
... as this seems to avoid a lot of the problems dealing with already selected/checked list rows, but it doesn't always jump to the selected row when other lines are already checked.