Widgets inherit the properties of a webpart so a webpart is needed. You can create a webpart in the UI with properties but unless there is code behind your values won't stick. So you need code.
One thing you could do is create an all inclusive webpart that has multiple properties for it and simply do as you're stating with the different layouts and such. Then you can also create multiple widgets from it too. Nice part about this approach is you have one webpart with simple properties to set that can be used all over.