The widgets API, the shortcode API and now Gutenberg all overlap and all have similar objectives. All of these efforts ideally would have sprung from work around the fields API. I do hope that all the different efforts come together so that in the end we get both a modern UI and a more consistent, easier and more powerful way to create and register components.

In an ideal world it should be fairly easy to create a component that can be adapted to work as a shortcode, block, widgets or meta field on any type of page, without having to use very different APIs.