Quentin,
Without looking too deep, I don't know why previous versions of system-packaged Python 3 bindings worked with newer versions of Python 3. Unintentionally, we may not have been using any APIs in our 8.8 bindings that have had breaking changes with newer Python versions, and we may have changed to using APIs that aren't backwards compatible at some point during 8.9 development.
I don't think we have documentation about our system packages of the Python bindings matching upstream versions of Python, but it's generally understood that, for example, packages named "python3-*" should be compatible with the version of Python installed by the "python3" package. When these library packages contain only Python code (instead of compiled binaries), yes, they do tend to also work with newer versions of Python, but the recommended practice is to use conda or virtualenvs to keep your Python environment separate from the system environment when using a different version of Python (or even the same version, considering that what's available via system package repositories is often out of date with what's available in PyPI via pip).
Jason