What is the difference?
In practice, they do the same, but are used differently. removeMovieClip can be used as a global method or local method (removeMovieClip ( someMC ) or someMC.removeMovieClip() ). destroyObject can only be used inside of a class that inherits from UIObject somewhere on the inheritance chain and takes the string name of the movie clip, not a movie clip path (destroyObject ( “someMC” ) ).
Fundamentally, however, they are very different. removeMovieClip can only remove movie clips that are in positive depths, 0 included. Therefore, if you dragged a List component on the stage, removeMovieClip will not work on it unless you use the swapDepths command to bring the component to a positive depth (hopefully unoccupied) and then remove it. If the playhead leaves, however, the frame where the List component is, and then returns, the List too will re-appear.
destroyObject does this for you automatically. Additionally, since movie clips/components in classes use member variables, it takes the liberty in deleting the component’s name; not the variable itself mind you, but the name nonetheless.
Neither deal with pointers to the object you may have created elsewhere.