Maybe? It depends on your definition of a quotient space. I would say no based on context I think? This is not an over approximation but it is a correct under approximation, albeit not a very useful under approximation. There is a sense in which you $q$ implementation is the best computable approximation of that function that it is the "greatest" computable function consistent with the corresponding classical function.
Domain theoretically, which I claim is the correct tool to use to answer this question, $q(\omega) \not= T$ but instead $q(\omega) = \bot$.
Further, keep in mind that actually Peano has a whole host of other values you didn't account for from a domain theoretical perspective such as $\bot$, $Succ(\bot), Succ(Succ(\bot))$, etc...
So anytime we try to implement a topology in Haskell like this what we're really trying to do is use the actual topology we get from the Haskell values to implement a subspace topology or some kind of embedding. This is known as an over approximation. So for instance we say we implement the natural numbers with the discrete topology using the Peano definition you gave above but we also claim this same type implements other richer topologies like the topology induced by the actual domain for that type or the extended natural numbers as you pointed them out. (P.S. using strictness annotations you can restrict some of these values to get closer to discrete topologies). Sometimes however we just want to implement all of the things we can implement and just accept we can't represent all the classical objects. We do this with the exact reals for instance which are the best computable approximation of the classical reals. This is an example of under approximation.
With quotient spaces things get even more tricky in what hoops we have to jump though to say we've implemented such a space. Mathematically you can quotient by any equivalence relation but with a computer we're generally limited to working only with the decidable equivalence relations. In domain theoretical language that means the equivalence relation must be a continuous function. Another way to implement an equivalence relation is to define a mapping to canonical members which is really what you've done here and you've defined the induced equivalence relation from it. But again you can only define the best computable approximation of the needed mapping here. The issue is that the actual function you need is not continuous/computable.
So we have to make a choice, what counts as a valid approximation? Well the reason we want to call this a quotient space is so that we can think of it as one and apply the theorems and reasoning that come along with thinking about this as a quotient space right? The only way the classical theorems about quotient spaces go though when talking about computable approximations is if we restrict ourselves to decidable/continuous equivalence relations (or equivalently canonicalization maps).
But you could say "well I only really care about the parts that are possible to compute". It turns out this is actually pretty useful sometimes. When working with such approximations as in the above any theorem you use from classical topology that goes wrong will cause an infinite loop but it won't result in your program outputting an incorrect result despite your correct classical proof! So if infinite loops are acceptable behavior in the cases that you can't compute something this is totally acceptable. One paper that springs to mind that does such a thing is A Simple Differentiable Programming Language where they give themselves an out anywhere a discontinuity is hit. For that use case this is a good enough approximation, for others its not.
So the thing to keep in mind is that with computers we're almost always approximating more exotic mathematical structures unless you really are trying to work with a domain in which case that's exactly what Haskell does. The question is then how good of an approximation is acceptable? Do you need an over approximation or is an under approximation good enough?