Jean-Charles Castelletto est un footballeur franco-camerounais évoluant au poste de défenseur central au FC Nantes. Il est né le 26 janvier 1995 à Clamart en France.
Agé seulement de 13 ans, Jean-Charles Castelletto est repéré par la cellule de recrutement de l'AJ Auxerre lors d'un concours dans l'Essonne au concours INF Clairefontaine. Il est ensuite invité à participer au tournoi Sans Frontière de Sens pour jouer avec l’équipe de l’AJ Auxerre avant de signer un contrat de non-sollicitation. Jusqu'à ses 15 ans, il évolue sous les couleurs du club partenaire de l'AJA, le CS Brétigny.
Issu de la génération 95 (qui remportera la Coupe Gambardella en 2014 face au Stade de Reims), il passe par les différentes catégories de jeunes à l'AJ Auxerre ainsi qu'en sélection nationale. Défenseur central de formation, il est repositionné dans un premier temps à droite avec son club ainsi qu'en sélection à l'Euro U17. Au cours de la saison 2013-2014, il évolue principalement avec l'équipe réserve auxerroise en CFA. Le 4 avril 2013, il signe son premier contrat professionnel pour une durée de trois ans et dispute quelques jours plus tard son premier match sous les couleurs auxerroises face au GFC Ajaccio (match nul 0-0).
La saison suivante, il dispute son premier match de la saison face au Tours FC (victoire 4-0) lors de la treizième journée de Ligue 2. C'est à la mi-saison, à la suite de la blessure d'Éric Marester, que Jean-Charles gagne une place durable dans le onze titulaire auxerrois. Il disputera 19 matches de championnat, principalement en seconde partie de saison. Sa polyvalence (utilisé aux postes de défenseur droit, gauche et axial) et ses qualités athlétiques plaisent à ses différents entraîneurs Bernard Casoni puis Jean-Luc Vannuchi. Ce dernier fera de lui un titulaire indiscutable pour la fin de saison, contribuant au maintien du club en Ligue 2.
Au cours de la saison 2014-2015, il est cette fois-ci principalement utilisé au poste de défenseur central au côté de la nouvelle recrue auxerroise Sébastien Puygrenier afin de former une charnière centrale plus complémentaire, Castelletto apportant sa vitesse et sa fougue à un Puygrenier plus lent mais efficace dans le marquage individuel et dans l'anticipation des passes. Le 26 septembre 2014, au cours de la neuvième journée de Ligue 2, Castelletto inscrit son premier but sous les couleurs de son club formateur face à l'AC Arles-Avignon d'une tête à bout portant à la suite d'une déviation de son coéquipier Sébastien Puygrenier.
Le 23 juillet 2015, il signe un contrat de trois ans au Club Bruges. Défenseur polyvalent, il vient renforcer le secteur défensif en tant que joueur de complément, le club étant engagé sur plusieurs tableaux dont en Ligue Europa. Avec les Hurlus, il s'impose dans le onze de départ, formant la charnière centrale au côté de Noë Dussenne. Satisfait de son temps de jeu et son entraîneur, Glen De Boeck, comptant sur lui, il se voit alors prolonger l'aventure à Mouscron pour y poursuivre son apprentissage.
Le 21 juillet 2017, il s'engage pour trois ans en faveur du Stade brestois. Il inaugure ses nouvelles couleurs en Corse face à l'AC Ajaccio (2e journée, défaite 2-1). Titulaire à 33 reprises en Ligue 2, il forme la charnière centrale au côté d'Anthony Weber. Qualifiée pour les barrages de promotion, son équipe est éliminée par Le Havre au premier tour des play-offs.
Il réalise un nouvel exercice plein lors de la saison 2018-2019, titulaire à 31 reprises en championnat, qui se conclut par une deuxième place en Ligue 2 et une promotion en Ligue 1.
Alors qu'il n'avait manqué qu'une seule rencontre de championnat depuis le début de saison 2019-2020, il est exclu lors de la réception des Girondins de Bordeaux (23e journée, 1-1) et est suspendu pour trois matches dont un avec sursis.
Le FC Nantes officialise son arrivée le 26 mai 2020. Jean-Charles Castelletto y signe un contrat de trois ans, étant lié au club nantais jusqu'en 2023. En ouverture de la saison 2021-2022, il égalise sur corner contre l'AS Monaco, permettant au FC Nantes de prendre un point en Principauté.