Interestingly, I’m in the middle of solutioning for this right now.
My solution was to build a way to store metadata related to a given record.
For record updates, I have a script that takes the record data and changes then builds or updates a JSON array that is then appended to a long-text field.
When a new record is created, the initial field values are used to construct a JSON array that then gets transformed into a string and then added to the long-text field.
From there, any time there is an update, the script will parse the JSON in the field and then adds the change/value history to it before appending the updated array to the long-text field.