En effet, d'après le wiktionaire :
puits /pɥi/ masculin, singulier et pluriel identiques
En googlant un peu j'ai trouvé cette réponse yahoo :
En latin le mot "puits" se dit "puteus", ce qui implique que le radical et -pute- et justifie la diphtongaison -puit-. Mais que fait-on de la longueur des syllabes? Le nom français vient de l'accusatif des mots latin donc puteum où le 2nd "u" est long. On peut donc suspecter (à défaut d'attester) que le mot à l'époque de Charlemagne se disait "puito" comme on ne peut faire disparaître la deuxième syllabe "teu/to".
Ainsi quand en ancien français (XIe/XIIe siècles) on avait le nom au nominatif on devait sans doute dire "li puites" et non "li puiz" la voyelle empêchant la palatalisation. Et même si on disait "li puiz" l'oreille aurait gardé une mémoire de cette syllabe disparue ce qui signifie qu'en moyen français (XVe) la voyelle avait beau avoir disparu ("puits") la palatalisation ne se faisant plus à cette époque le "s" est resté dans la forme écrite avant de ne plus être prononcé de même que le "t" au XVIe siècle.