Nelson spent seven years with Stoke City as a schoolboy before being released in February 2009. He joined Plymouth Argyle two months later. His performances in the 2009–10 season for the youth team and reserves, in both defence and midfield, earned him a place in the first-team squad for the club's final match of the campaign against Peterborough United. Nelson trained with the first team during throughout their 2010–11 pre-season and impressed manager Peter Reid. "I was very impressed with young Curtis," said Reid. "I like young players and he will be training with us all the time now. He played centre-back last year but he can play midfield as well." He made his first-team debut on 10 August 2010 in the League Cup against Notts County, replacing Anton Peterlin as a second-half substitute. He signed his first professional contract in October 2010, one that would last until the end of the 2011–12 season. His performances for Argyle led to a call-up to the England under-18 team to play Italy in April 2011. He replaced George Moncur in the second half as England drew 1–1. Nelson appeared in 35 league matches during his debut season and three more in cup competitions. He finished the season by winning the club's Young Player of the Year award. Nelson began the new season in the team, but lost his place in November after the club signed Maxime Blanchard and Darren Purse. A knee injury in December meant a lengthy spell on the sidelines and new manager Carl Fletcher stressed that it was important Nelson took as long as he needed to make a full recovery. Nelson signed a new undisclosed contract in April 2012, along with teammates Luke Young and Jared Sims. Nelson finished the season with 21 appearances in all competitions. He scored his first senior goal in a win against Northampton Town in September. "I ran over to the fans to celebrate, but I didn't know what to do," said Nelson. In April 2013, he became the youngest Plymouth Argyle captain since Norman Piper in August 1967 when he led the team in a win against Cheltenham Town. "It was a great honour. To be the captain at such a young age, I wasn't expecting it at all." Nelson made 32 appearances in the 2012–13 campaign and scored three goals. On 7 May 2014, Nelson committed to the Pilgrims by signing a new two-year contract with the club.
Oxford United
On 4 July 2016, Nelson signed for newly promoted League One club Oxford United on a two-year contract, later extended by a year. Before the start of his second season at the club, following the departure of John Lundstram, he was appointed team captain. He suffered a ruptured Achilles tendon during a home defeat to Northampton Town in November 2017 and was ruled out for the remainder of the season, teammate John Mousinho replacing him as captain. Nelson returned, earlier than expected, to the first team as a substitute on 14 April 2018 and was immediately handed the captain's armband, though Mousinho later took the armband permanently. Nelson declined a contract renewal and left Oxford after the 2018–19 season, having appeared 121 times in all competitions, scoring 8 times, in his three seasons with the club.
Cardiff City
Nelson signed for newly relegated Championship club Cardiff City on 27 June 2019 on a free transfer on a two-year contract. He made his debut as a substitute in place of Marlon Pack during a 3–0 defeat to Reading. He scored his first goal for Cardiff on 2 November 2019 in a 4–2 win against Birmingham City.