When (from the controller) the user edits a parameter, this is an obvious place for hosts to create an undo point. It’s up to the host, and it might be limited to one undo point per second or something, but the basic principle is there.
If the user is editing a more complex graphical control (such as free-drawing a graph with the mouse), how should I signal to the host that something has changed which could be an undo step? It’s not a parametric control, it’s just a massive array/vector of values.
(e.g. in JSFX you can call sliderchange(-1), and it may at its discretion create an undo point, calling your custom serialisation code if you have it)