Well, widgets support parameters already so if you want users to enter them, they can now, just open any widget that uses parameters and see the code.
I think the most complicated I wrote was Google Maps:
If you want users to edit templates to somewhat limit the parameters users enter and set other widget parameters to default values, then you can simply wrap a widget in a template.
In any case, you're only limited by your imagination and Smarty templating language, well also by the fact that widgets themselves can't use templates inside them, but only parameters passed to them.
Hope this helps.