What you say about how well-maintained the old software is, is true. Good programming can extend the life of programs a lot.
But the ideas about "throwing away the old stuff" have been around at least since Assembler language, and it is often an excuse for lazyness. When anyone encounters something really new to them, it causes what the psychologists call "Learning Frustration". People that can't endure frustration will clutch at any way to avoid learning things, and they often have the idea that if they write it new it will be less frustrating.
This can result in the loss of the only documentation of what really needs to be done, i.e., the old source code. The "specs" are never correct and seldom even updated to the last version of the software. The managers seldom know exactly what is being done. The specs you are given new, are wrong. The only way to detect the errors, is to know what is being done in the old program.
Bottom line: You have to learn the old code just to be able to successfully write new code. And by then it is usually less time to update the old code. (If the term "update" includes perhaps converting to new languages.) Or at least, then you can make a rational decision about whether to use the old code.
Sometimes, the hard way is actually the easy way! 8-)