To implement menu editing, the intent is that a per-user file is
created. The per-user file should specify a <MergeFile> with the
system wide file, so that system changes are inherited. When the user
deletes a menu item, you add
<Exclude><Filename>foo.desktop</Filename></Exclude>. If
the user adds a menu item, you use
<Include><Filename>foo.desktop</Filename></Include>.
If the user moves a folder you can use <Move> elements
to represent the move. <Move> elements used for menu-editing
should always be added to the most top-level menu to ensure that moves
are performed in the order in which they are specified; moves specified
in child menus are always performed before moves specified in a more
top level menu regardless of their location in the menu file.
To delete a folder, simply append the <Deleted> element.
When adding a new folder or moving an existing folder, menu editing
implementations are advised not to re-use the menu path of a previously
deleted folder.
Menu editors probably need to do some kind of consolidation/compression
to avoid an XML tree that grows infinitely over time.