Neither side had really settled when Hudson-Odoi stole the ball off Jacob Murphy following a throw-in, drove forward and caught Nick Pope off guard with a curling strike into the bottom corner.
Eddie Howe's Newcastle side immediately looked to right that wrong, with Anthony Gordon unfortunate not to convert on the stretch as Tino Livramento's teasing cross fizzed across the face of goal.
The 18-year-old Miley, making his first league start in 365 days, provided the equaliser a few minutes later when he rifled a low shot past Matz Sels after Forest failed to clear from a free-kick.
Murphy then atoned for his earlier error by bundling the ball across the goal-line after Lewis Hall's attempted squared pass was deflected goalward by Murillo.
Forest's situation worsened when Ola Aina handled Hall's cross inside the penalty area, with referee Jarred Gillett pointing to the spot after consulting the pitchside monitor.
Isak just about beat Sels with his spot-kick down the middle, though the Belgian goalkeeper may feel disappointed not to have saves it having stood tall.
The Newcastle striker compounded a torrid 11 minute-spell for Forest as he ran through on goal and finished past Sels, albeit with a slight deflection off Murillo.
Forest struggled to deal with set-pieces all afternoon and came close to conceding a fifth early in the second half when Fabian Schar's header from another wicked Hall delivery hit the top of the post.
However, the home side took their foot off the gas in the second-half and were left hanging on for a nervy victory.
Milenkovic flicked Chris Wood's header past Pope following a corner, before Yates converted from another set-piece to leave the home crowd cursing their side's loss of focus.