The types surfaced by this framework should be immutable (@dataclass(frozen=True)).
We should encourage people to write functions (including component functions and, if we get around to it, possibly middleware) to alter these items.
We should provide convenience routines for common operations (Element.append() and Element.extend(), for instance) that return new instances.