While we could have placed the widget creation code in the same file as the book review plugin, placing it in a separate file is just as valid. Some plugins distributed on the official wordpress.org repository actually use that technique to break up their functionality into more manageable code segments. The only thing to be careful of with this technique is to be sure that all the elements that a secondary plugin is dependent upon are loaded before referring to them in callback functions.
In this case, since widgets are created late in the WordPress initialization process, the custom post type that will be required by the widget will be available.