WebExtensions API?

So I was doing some reading about the WebExtension API. I have a few questions before going forward. (keep in mind I haven’t made a Chrome extensions, so I’m unfamiliar with the structure)

How do we define preferences with it, just a prefs.js file? Subsequently, how do we also declare the options page; the API page doesn’t list that it supports the options_page property.

Using manifest.json vs package.json, looking here, I found that packing the extension is easy enough. I noticed though that it still has the package.json file, is necessary? With package.json you would define the name, extension version, min/max browser version, and other meta data (and preferences). However, with the manifest.json it also takes the add-on metadata. Are both required and/or what are the definitive differences between them then?