I don't think you can reverse the order easily. Maybe a solution would be to put the new node on some kind of waiting list (so that you don't ruin your main structure) and when removeRows is called, remove the node and put the waiting node into the structure. You can use a timer to reject or accept the new node if removeRows doesn't follow the insertion. Other than that, you can reimplement dropMimeData() in your model.
Bookmarks