Historically, надо is similar to а past participle form (cf. English -de, Spanish -d@ and Swedish -d(e) / -t).
Нужно, in turn, represents a cluster of historically -нъ-ending words which in modern Russian are at a borderline between an adjective and a participle (cf. English driven, striken, etc).
Both forms are related to Proto-Germanic naudiz.
In my opinion, both forms are also related to German nehmen and Dutch niemen.
The word stems are preserved in modern Russian interjections:
на! = here you are! / Take it! (lit. 'you-take-it!', often with a less friendly / respective connotation) and
ну! = give it (away)! I'm waiting / I agree / come on / yep, ok (lit. 'I-take-it' or 'let me take it'), used with a somewhat more friendly emphasis.
Hence, the overtones would be like
не надо = It is not needed 'from your part / point of view / for/from you'
не нужно = it is not needed from my part / point of view / for/from me'.
But most native speakers would not care about the difference, anyway, or would not explain it.
PS The proverbial etymology of надо as a form of надобно doesn't stand any etymological scrutiny not just because words starting with на- in general were very unlucky when interpreted by Vasmer and Co, but also because such an etymology doesn't explain the sound alteration in надо and нужно.
Also, stating that -до is not a suffix but a part of stem one has to admit the same for words like чудо, стадо and говядо.