welcome to the site alex; those are some tricky question actually.
there is a very good free drag+drop component set that i have used in the past for advanced drag and drop stuff (in AND OUT):
http://www.angusj.com/delphi/ (see bottom, Drag & Drop Component Suite); i can help you get it working for bcb if you have trouble. [i keep meaning to write some little tutorials on tricks for compiling delphi components for bcb - sometimes there are some tricky stuff].
thought i dont think that component is going to help you - basically youll want to detect a drag begin event for the tabs, and then write some custom highlighting to detect which tab they are dragging it over in order to show a visual hint. i really don't know how to do this but id be very interested in hearing how you do it if you figure out how.
a great place to look for solutions for stuff like this is to search google GROUPS for delphi. (delphi solutions as you probably know are 99% same as bcb, but delphi is more likely to get you some good hits).
there have been some good articles on implemented undo/redo functionality. your approach seems a bit strange to me.. are you sure you want to reinvent the wheel? there are some nice free bcb/delphi editor components that might implement undo/redo already (scite?). or else if you are really implmenting your own custom editor, it seems like you might be better off catching all keypresses and handling them manually in which case you wouldnt really be needing to catch en_update, etc. or am i wrong?