This isn't really DOS' or Microsoft's fault. IBM should probably be blamed. The problem originates with the video BIOS. (which, unless I'm mistaken, was written by IBM)

The standard method for writing text to the screen via BIOS is to use interrupt 0x10, subfunction 0x0e. This is the "teletype" command, it writes a character to the screen and updates the character position.

This function interprets "line feed" as a line feed; it drops to the next line without changing the cursor's column. It interprets "carriage return" as carriage return; it returns the cursor to the first column of the current row.

Now it's possible to just write directly to the video memory if the OS keeps track of the cursor position itself, and it's certainly possible for the OS to send 0x0d 0x0a to the video card whenever 0x0a is printed, but the simple thing to do is just pass strings on to BIOS one character at a time and let it worry about everything.

So this 'bug' isn't Microsoft's fault, they just didn't fix it.

...then by the time you get to Windows, Microsoft was already trapped by backwards compatibility.