Naive is what the lad was, i think.
If I saw a little baby boy, I'd say "He is so tiny and innocent." I think using 'naive' is quite bad here.But if I know a 10 year-old boy, and say "He is so innocent.", it could mean his being innocent is a good thing, maybe in a context when the society and people at his age are corrupted.
But if I say "He is naive", it could mean I think he is too innocent and shows an inability to make good judgement. Could be 'naive' is a word less strong. I think this is what makes the difference between 'innocent' and 'stupid'.
Innocent also has the meaning of not guilty which the other two words do not.
Rough guide-
Innocent - no memory of being taught anything so seems to have learned nothing.Naive - has learned less than might be expected.Stupid - has been taught but has not learned.