Robin van Persie struck the post from the penalty spot, having rattled the frame of the goal moments earlier after stepping off the bench, while Javier Hernandez somehow put the ball over the bar from six yards out early in the second half.
Midfielder Marouane Fellaini was dismissed in the closing moments after a second yellow card following a series of petty challenges, with United remaining top of their section, a point ahead of Bayer Leverkusen who also drew 0-0 with Shakhtar Donetsk.
Moyes' men travel to Germany for their next European fixture before ending the group phase at home to Shakhtar, and although they remain in control of their destiny, the Scot accepts they should be two points better off.
He told Sky Sports:"It shouldn't have been a draw, it should have been a victory, we played well enough to win the game, made a lot of chances, and we missed a penalty as well.
"When you get opportunities you want to take them. Those opportunities tonight would have made sure we were well clear at the top of the group, but we're still in a good position.
"It's a good position, it's where we want to be, but we should have had three points tonight and made it a lot easier.
"We go to Leverkusen next and then we play Shakhtar Donetsk at home, so hopefully in those two games we'll make sure we qualify."
Moyes would not be drawn on the dismissal of Fellaini, but felt his side were not always favoured by referee Nicola Rizzoli.
He said: "I thought it was a difficult night all night for all the Manchester United players. They didn't get many decisions, but the referee has to do what he sees."
Having selected Hernandez ahead of Van Persie - possibly with Sunday's clash with Arsenal in mind - Moyes was keen to defend the Mexico international following his shocking miss.
He added: "I think it bobbles a little bit and he just gets underneath it a little bit."