So I did a bit of digging related to this topic, and it looks like binding a callback to SCN_MACRORECORD would allow you to record the history of changes in a way that treats a find/replace action as a single action rather than as a series of insertions and deletions of characters (which my modification log script currently does).
The catch? SCN_MACRORECORD notifications only fire when a macro is being recorded. This means that any script that wanted to record find/replace actions would have to start recording a macro when it was first run, and it could not stop recording the macro until it stopped. This means that such a script would prevent you from using the macro recorder in a normal way.
I don’t think it would be too difficult to implement such a script or plugin, but it’s important to understand the tradeoffs.
EDIT: I tried using PythonScript to print SCN_MACRORECORD notifications (just a simple editor.callback(lambda notif: print(notif), [SCINTILLANOTIFICATION.MACRORECORD])), and I found that find/replace actions don’t trigger those notifications in PythonScript. This is obviously really weird, because find/replace actions are clearly macroable. So I’m not too sure that Ariel’s idea is really do-able, at least in PythonScript.