Holy cow, I wrote a book!
In the discussion of the environment variable problem,
BryanK posits that the real mistake was allowing batch files to
modify their parent environment in the first place.
Instead, they should have run in a sub-process.
Try saying that when your computer has only 16KB of memory,
which is how much memory the original IBM PC came with.
Heck, try saying that when your operating system doesn't
even support sub-processes!
It wasn't until MS-DOS 2.0 that the ability to run a process
and then regain control after the process exits even existed.
MS-DOS 1.0 followed the CP/M model wherein exiting a process
freed all the memory in the computer
(save for the operating system itself, of course; thank you, nitpickers)
and loaded a fresh copy of the command interpreter.
There were some checksum hacks to avoid reloading the command
interpreter if it didn't appear to have been modified by the
program that just exited.
Besides, if batch files couldn't modify the environment of
the command interpreter, the AUTOEXEC.BAT file
would be pretty useless.