I haven't looked at update-ctags.py in detail but I assume it attempts to preserve our small changes?
The only small change in ctags `main` is what `ctags_changes.patch` does - the script just copies over the files from ctags main and applies this patch.
Another story are the parsers where changes are rather big apart from parsers in this pull request. The script ignores parsers starting with `geany_` (those will have to be maintained by us) and only replaces parsers without this prefix. This is something this pull request does too - removes the `geany_` prefix so the next time we run `update-ctags.py`, the upstream versions of these parsers will be copied automatically and we won't have to worry about them any more.