I've been thinking about this a lot.
On #aitherboard, I let the user "edit" any event (even if they did not sign it) by just pressing a button. I create a clone of the event and discard the unique identifiers (event ID, timestamp, signature), allow them to edit kind, tags, and content, and then add new unique identifiers and publish. Relays then suppress, mark, or delete the original event (if it is replacement), or they simply return both the original and clone.
If it were a mutation, like in an RDB, I could change the content and it would overwrite in place (same record). But this creates a new record. Nostr effectively does only the CRD parts of CRUD. No update, only replace.