McNeal was born in Chicago, Illinois to parents Edward and Meryln McNeal. He has 2 siblings (January and Jeremy). He attended Hillcrest High School along with point guard Maurice Acker, an eventual college teammate. McNeal was a third-team Parade All-American in 2005.
McNeal won the Big East's Defensive Player of the Year award as a sophomore in the 2006–07 season and was the only guard on the Big East's All-First Team in 2008–09. McNeal was an Associated Press second team All-American in 2008–09 as well.
On February 10, 2009, in a 102-84 loss at Villanova, McNeal broke George Thompson's 41-year-old school record of 1,773 points. As of 2017, McNeal remains Marquette's all-time leader in points scored, and is also the school's all-time leader in steals, field goals made, and field goal attempts. He is third all-time in games played and seventh in assists. 
After going undrafted in the 2009 NBA draft, McNeal joined the Sacramento Kings for the 2009 Las Vegas Summer League. On September 28, 2009, he signed with the Los Angeles Clippers. However, he was waived on October 19, 2009. In November 2009, he signed with Dexia Mons-Hainaut of Belgium for the 2009–10 season. In March 2010, he left Dexia after drawing a two-week suspension for a positive marijuana test. 
In July 2010, he joined the Charlotte Bobcats for the Orlando Summer League  and the Chicago Bulls for the Las Vegas Summer League. On October 9, 2010, he signed with the Houston Rockets. However, he was waived by the Rockets on October 18. On October 30, 2010, he was acquired by the Rio Grande Valley Vipers. On March 9, 2011, he signed a 10-day contract with the New Orleans Hornets.  On March 19, he returned to the Vipers after his 10-day contract expired. He did not appear in a game for the Hornets during his 10 days with the team. 
On September 21, 2012, McNeal signed with the Toronto Raptors.  However, he was waived by the Raptors on October 22.  On November 1, 2012, he was re-acquired by the Vipers. The next day, he was traded to the Bakersfield Jam.  On February 4, 2013, McNeal was named to the Prospects All-Star roster for the 2013 NBA D-League All-Star Game. 
On March 27, 2013, McNeal signed a 10-day contract with the Utah Jazz.  On April 6, 2013, McNeal signed with the Utah Jazz for the rest of the 2012–13 season.  He joined the Jazz for the 2013 NBA Summer League. On September 25, 2013, he was waived by the Jazz before appearing in a game for them. 
In October 2013, McNeal signed with the Zhejiang Golden Bulls for the 2013–14 season.  In December 2013, he was released by the Golden Bulls after 15 games. On February 24, 2014, he was reacquired by the Bakersfield Jam.
On August 4, 2014, McNeal signed a one-year deal with the Spanish team Baloncesto Sevilla.  However, he left the team in September 2014 before appearing in a game for them following the death of his father.  On January 13, 2015, he was reacquired by the Bakersfield Jam once again  and was later named the NBA D-League Impact Player of the Year. 
On April 1, 2015, McNeal signed a 10-day contract with the Phoenix Suns.  The following day, he made his NBA debut, scoring two points in a 107–106 loss to the Golden State Warriors.  On April 11, he signed with the Suns through the 2015–16 season.  On July 17, 2015, he was waived by the Suns.  Despite this, McNeal continued to play for the Suns at the 2015 Las Vegas Summer League, where he averaged 2.1 points and 1.3 rebounds in seven games. 
On July 31, 2015, McNeal signed with Aris Thessaloniki of Greece for the 2015–16 season.  In 36 league games for Aris, he averaged 14.1 points, 3.9 rebounds, 2.7 assists and 1.1 steals per game. He also appeared in 16 EuroCup games, averaging 14.4 points, 4.3 rebounds, 2.2 assists and 1.6 steals per game.
On August 22, 2017, McNeal signed with French club SIG Strasbourg.  However, on September 30, 2017, McNeal parted ways with Strasbourg and signed with the Israeli team Hapoel Tel Aviv for the 2017–18 season.