I am confused by your question.
if i repeatedly call selectNode(), i see that the check state does toggle. however, if i manually check with a button click, selectNode() seems to re-assert that checked state. the next selectNode() call will then uncheck.
First, I am not sure what you mean by a buttons click... mouse button or button on page?
Regardless, whether you click the checkbox or have js call selectNode they both will do the same thing. If the node was checked it will uncheck it, if it is unchecked it will check. If you are simply trying to uncheck a box, regardless of whether its checked or not, you should check the node's selected property. Only call selectNode if the node is currently checked.
Is there a single iterator or collection of all nodes, if i wanted to visit every node in the tree? Or do i have to walk the tree?
Their is no flattened view of the tree. You will need to walk it. However, using findNode does do a recursive lookup for you if you know the node you are looking for.