I think that by putting some of your above statements together, we've got all the bits we need to prove that 2.999999... = 3. The key one was where you said that you were writing 0.0000....000001 as 1/(10^n) (or 10^(-n)) with n approaching infinity. And as Faldage correctly stated, that's equal to zero. So now put it all together:

2.99999999... = lim (n->inf) (3 - 10^(-n)) - this is more or less what was stated above, right? That it differs from 3 by a small amount, namely 10^(-n).

But using the rules of limits, which have been implicitly used above, so we must be in agreement on them, re-write the RHS, so now we have

2.99999999... = lim (n->inf) (3) - lim (n->inf) (10^(-n))

Again using the rules of limits, the limit of a constant (the first term) is a constant itself, and the limit of the second term is, as Faldage said, zero, so we have

2.99999999... = 3 - 0
2.99999999... = 3

Making up an entirely different function from the one being discussed that shows that the limit OF THE PARTICULAR FUNCTION is different when approaching from above or below has no relevance to this argument, which is "how do we write the number 3?", not "can we think of a function that has a limit that is undefined at 3?". Certainly f(x) = 3/(x-3) is undefined at x = 3 but that doesn't tell you a lot about the point x = 3 on the number line.