The TreeListBox is a complicated control because it fitting a tree structure of your items and presents them in a "flat" list. It is completely geared around MVVM design. While it is an ItemsControl, the actual items bound to ItemsSource is a collection of an internal tree node type where each node wraps one of your items.
1) There isn't really a concept of item "index" in the control itself since the (1) the control is virtualized and (2) the display index depends on what is expanded/collapsed above it. If you need to know the index of items, you would need to make a tree walker for your MVVM tree and walk the tree. Increment the current index for each item you encounter. As long as you use an ObservableCollection for your item's collection of child items, it should all be up to date after drag/drops and in the proper order that is rendered in the control.
2) The TreeListBoxItemAdapter.OnDrop method is called when a drop occurs and tells you the targeted item. You then determine how the drop occurs in your implementation of that method. You are in control of where the drop goes.
3) Our sample TreeListBoxItemAdapter.OnDrop method shows how to focus the dropped item.
4) The TreeListBox is designed to be used with a MVVM tree structure of your items that have parent/child relationships. If you can't have that kind of setup, then unfortunately you might need to use a different control that TreeListBox.