A major motivation for the design of TeX originally and also of LaTeX is document stability, you should be able to get a 20 year old LaTeX document and still process it. To get absolute guaranteed stability you need to archive the whole system executables, fonts, etc, but for the vast majority of cases that is not necessary and an old LaTeX document will run without change on a new system.
You see this in packages like fixltx2e
which is distributed as part of the base LaTeX distribution. It implements a bunch of unrelated usability improvements to LaTeX which would be just directly incorporated into the code were it not for the compatibility requirements.
Note there is no such thing as a compatible change in a system like LaTeX that exposes its implementation at the user level. If you make any change to any command, some document somewhere will break. If you just add \relax
or remove a spurious {}
group or add a %
to the end of a line in a place where space token can not do any harm, the operational behaviour of the modified command may be identical, but someone somewhere, will be using patch package (or just direct manipulation with delimited arguments) that is patching that command in a way that assumed the third token in its definition is \halign
(or whatever) and the patch fails if that becomes the fourth token. Or perhaps the document is using \checkcommand
and intentionally throws an error if the original command changes in any way.
So often when things change it is better to change the package name and put things in a new package, even if you are the maintainer of the original package and so could make the update in place. This means that old documents are unchanged. It does mean you have to at least partially support two versions of the code forever though.
Sometimes packages get effectively replaced by other people. enumerate
and color
for example are part of the core LaTeX distribution. You may see answers on this site suggesting they are replaced by say enumitem
and xcolor
but those packages are contributed extensions not part of the core release. That is a less important distinction than it used to be now most people use a tex distribution such as texlive or miktex as that handles package updating in a consistent manner whatever the original source. The names of those packages are different partly because they have different authors and are maintained separately, but as noted above even if the same maintainer were involved probably new packages would be called for so that the old interfaces remained the same.
Even if the command structure is identical, updating a package can be difficult, there are some reported instances of longtable
making an allegedly suboptimal page breaking choice. Code to modify the decision making could be added but not without changing the page breaking in many existing documents which isn't really acceptable. Even if a new version is better in some way, if an existing document has forced page breaks to overcome a limitation in the old algorithm then the page breaking changes, a document could easily be left with pages that are empty or just with a couple of rows of a table. (In that case probably a package option to opt-in to the new features might be the thing to do.)
A couple of times I have tried to force a package deprecation by asking ctan maintains to remove the package from distribution. It doesn't really work: if you have a document archive of thousands of historical documents you don't really want to be going through them all to see if they use the old deprecated package and updating them to use the new one. It is simpler (and perfectly reasonable) just to complain and get the package put back (or to maintain a local copy of it).