First, you were probably taught the proof incorrectly; or at least, have seen the incorrect version at some point. The Wikipedia article, as it stands today, tries to not make the mistakes in the incorrect version. But it gets re-explained incorrectly.
The first mistake is superficial only. Cantor didn't use real numbers. They can work, but need additional steps. Like Wikipedia, he used infinite-length binary strings. They can be mapped to the reals in the interval [0,1], but some real numbers are mapped by two strings (in binary, the strings 100... and 0111... both map to 1/2).
The big mistake, that confuses many, is that the first step of the correct proof is not a hypothetical. It is not "we are assuming that we can list every possible string," as another answer here put it. Cantor considered any infinite list of such strings that could exist. This isn't a hypothetical list, to be used for a proof by contradiction. Nor does it have to contain every such string. It means any list that actually exists. You are thinking that every string must be in the list, which is still hypothetical and is what leads to your confusion.
What diagonalization shows, is that for any list that can be put in front of you, there must be a string s that is not in that list. It doesn't show that s cannot be in a list, or added to the list in front of you. It shows that there must be an s that is not in the particular list in front of you.
The critical, second part of the proof is seldom taught. (It gets folded into the first part.) This is the part that requires a hypothetical. If you could list the set of all such strings, a contradiction is produced. We can construct an s that is not in the set listed, but by definition s is in the set listed.