There is no "after infinity".
You can justify the idea by defining a decimal representation of a number x as a vector x_2, x_1, x_0, x_{-1}, x_{-2} ..., with x_n ∈ {0, 1, ..., 9}. Negative indexes are digits after the comma, positive indexes before the comma. You can recover the original number simply using
x = \sum_{n=-∞}^{n=∞} 10^n x_{n} (1)
(this sum always converges as long as x_n = 0 when n > N, for some big enough N ∈ ℕ).
For example, the number three is represented by x_0 = 1, x_n = 0 otherwise. 0.9... is defined as x_n = 0 for n >= 0, 9 for n 1. If z = x - y and for all x_n, y_n we have that x_n >= y_n, then z_n = x_n - y_n for all n.
2. If z = 10x, then z_n = x_{n-1}.
For the first operation, in order to be rigorous, we need to ensure that if z_n = x_n - y_n in the same conditions, then z = x - y. The proof of this part just consists of plugging the recovery formula (1): z = \sum 10^n z_n = \sum 10^n (x_n - y_n) = (\sum 10^n x_n) - (\sum 10^n y_n) = x - y. We can perform all those operations as we are guaranteed that (1) always converges.
Now, let y = 0.9... defined as in the example above (y_n = 0 for n >= 0, 9 otherwise), and let x = 10y (therefore x_n = 0 for n > 0, 9 otherwise). Now, define z_n = x_n - y_n, so that z_n = 9 for n = 1, 0 otherwise, which yields z = 9. As we demonstrated above, this implies that z = x - y, therefore 9 = 10y - y => y = 1, so 1 = 0.9... .
PS: I don't think one can make a proof without at least using some bits of limits to be able to switch between decimal representation as a vector and the number itself. However I don't think it's a problem, because you need the same bits to be able to talk of "0.9..." as a well-defined number.