Nelson was born in Lewisham, Greater London.[2] He first signed for Millwall at the age of eight.[5] He was captain of their youth team,[6] and turned professional in August 2014.[7] He made his senior debut for them on 28 December 2014.[5][6] He was praised by manager Ian Holloway as the team's "best player" in that match.[6] Nelson stated it was a "dream" to play for the club his family supports.[5]
On 4 January 2017, Nelson joined League Two side Newport County on loan until the end of the 2016–17 season.[8] He made his debut on 7 January, playing the full 90 minutes in a 1–3 away league defeat at Stevenage.[9] Nelson was part of the Newport squad that completed the 'Great Escape' with a 2–1 victory at home to Notts County on the final day of the 2016–17 season, which ensured Newport's survival in League Two.[10][11]
In May 2019, it was announced that Nelson would be one of five players released by Millwall when their contracts expired.[18]
In June 2019 he signed a two-year contract with Tranmere Rovers.[19]
On 9 July 2021, Nelson joined Northampton Town on a one-year deal.[20][21] He suffered an injury in training in September 2021,[22][23] a situation he described as a "nightmare".[24]