I've just realised something.
No role below the admin level can edit theme options, and for that matter widgets.
EDIT: This might not work out, see the suggestion further down.
Maybe if you could tell me which role the user in question has i write some addition code to add a new role that matches the current role, but also assigns the
edit_theme_options capability, which will be required to edit widgets.
This would mean the user gets access to theme options, if that's not a problem, great, easy fix. If not, what i can suggest is using a few more lines of code to hide the addition menu items that the user will now see (hide them so the user doesn't know he can do other things). Additionally, if we do need to hide menu items i believe i can also intercept the page requests to theme option pages, "Appearance", "Editor", etc.. and chuck up an error message if he/she tries to request those pages (so essentially stopping the user being able to do anything other than manage widgets).
However i've not considered that you may not want this user to edit "other" widgets, which might make things much more tricky.
------ New suggestion ------
On second thought, i could do what you suggested in your opening post, and rewrite the widget to pull data from a draft post, and leave the admin settings with the admin, ie. make it so you can update and change which draft post it pulls data from.
I'd need to know a few specifics about the Draft post you want to pull into the widget, but i can see this being a far easier approach then making a widget that works for one user (this would be the favourable option, and most likely to work - having thought about the capability problem).
Let me know how you feel about the above and we'll go from there.. ;)