Let jit-lock-after-change.el have:

  (add-hook 'jit-lock-after-change-extend-region-functions
            (lambda (_start _end _old-len)
              (condition-case nil
                  (backward-up-list)
                (scan-error nil)))
            nil
            t)

Start today's trunk by:

  emacs -Q --load /tmp/jit-lock-after-change.el

Insert parentheses:

  M-(

Inserted into *scratch* buffer:

  ) (

But expected:

  ()

I'm on RHEL 5.