I think you can clarify your question, and, perhaps, get more focused responses, if you share what exactly you are trying to achieve here in a specific, concrete example. The title of your question: "How to programatically add properties to a user control," could be interpreted a variety of ways, but the content of your question seems to focus on duplicating a ToolTip's functionality.
If I focused on
just the title of your question, my responses might mention techniques involving run-time modification using Reflection, or extension of UserControls via inheritance or Interfaces (design-time), and more.
I think (guess) what you are looking for here is how to build an "Extender Provider:" Control/Component: in WinForms, the ToolTip is a kind of strange "hybrid" Control that is both a Control, and a Component: it implements Extender Provider.
In any case, be sure and review this discussion here: [
^], and I'd look carefully at OriginalGriff's code suggestions.
Microsoft's documentation on WinForms ToolTip is ambiguous: you will find it both documented as a Component, which it is, and as a Control.
The ToolTip class is defined as inheriting from both Component, and IExtenderProvider.
public class ToolTip : Component, IExtenderProvider
Suggest you start by looking at these MSDN resources: [
^], and: [
^].
And then do a CP search: start here: [
^] : you'll find many useful articles like these "oldies:" [
^], and [
^].