how is the set of undecidable programs related to the set of non-halting programs?
The notion of an "undecidable program" doesn't make sense, for the same reasons I gave in response to your last question.  It makes sense to talk about whether a language is decidable or undecidable.  It doesn't make sense to talk about whether a program is decidable or undecidable.  If you check the formal definition of decidable, you'll see that decidability is only defined for languages.

Undecidable is not the same as non-halting.  Check the definition.