For one thing, 1 - 0.999... = 0.000... because you never get to have any remainder since 0.999... is infinite.
Or here's another proof:
x = 0.999...
10x = 9.999...
10x - x = 9.999... - 0.999...
9x = 9.000... = 9
9x = 9
x = 1
9.999.. - 0.999 is 9 no matter how we define .999... just as long as two or more occurrences of the 0.999... notation all denote the same entity, and we understand that the syntax 9.999... is 9 + 0.999...
For example, if we define 0.999... as "rubber duck" then 9.999... stands for 9 + "rubber duck", and 9.999... - 0.999... stands for 9 + "rubber duck" - "rubber duck" = 9.
You can't represent 0.2 exactly using IEEE floats, either, but that doesn't mean the representation 0.2 is not exactly equal to 1/5th.