I'm surprised a tiny change in genes doesn't completely destroy the viability of the organism. You can change one character in code and it no longer compiles or the entire thing crashes.
1) Genetic code translates groups of 3 DNA bases (codons) to 1 aminoacid. But more than one group encodes the same protein. Example: TCT, TCC, TCA, TCG, AGT and AGC = all of them encode Serine. So there are some mutations that lead to the exact same protein. You may think of it as a form of data encoding with some basic data recovery properties.
2) DNA has 2 matching strands. Basically, 2 copies of the same information. DNA constantly degrades and is constantly repaired with information from the other pair. You may think of it as RAID1.
3) We have 2 copies for almost all the genes. Some more than 2. Hemoglobin-alpha has 4 copies. For keratin we have 100+ functional genes (and more non-functional). [1] Think of it as data backups and versioning.
4) For some organism functions, more than one protein do the same job. For some metabolic pathways there are alternatives. It's like we have both GTK and QT working at the same time for any program, and some ancient TK and SDL remains form our ancerstors that could be used if all else fails.
5) The "program" can still crash. It's a miscarriage / spontaneous abortion. Try again with different versions of "libraries" and it will work.
in cases where tiny changes destroy the viability of an organism, most likely mutation would cause the destruction of said organism, and the only versions of said organism that remain are those that are not destroyed by tiny changes.