What language are you writing in?
Most have support for function pointers, functors or the like, so you could have the button creator pass a callback function to the button which is invoked when the button is clicked. That way the button doesn't have to know anything specific about what it's doing, and the caller doesn't have to know anything about anything going on inside the button.
I think that's the usual method... if I understand your question.
Could you pass me a quick example of this? I don't mean to totally thread hijack, but I think it's relevant. I'm using C++, but he's not, and sadly I don't think you can pseudocode something that's pretty language specific.
Also, if I'm reading your post right, trying to guess any possible action the app developer may want to take(especially yourself-- Since you'll probably push your engine to it's limits for the fact that you know them) is a very bad choice. Why? Obviously because you can't cover all possible outcome.
I recommend going the MVC approach with function pointers. Much more flexibility, and I
think it'd be easier once you got to writing the actual app.
Another approach you can do is an event system, which is somewhat like what you're describing. You can poll the object for things that have taken place, such as being clicked or a slider value being changed. From there you can use your own high end logic to deal with it.
Personally, I prefer function pointers. For reference, Windows uses an event-style approach(afaik), and Mac uses a function pointer approach.