I think technically speaking, a Package is more akin to a collection of files that are grouped together, but those files can be anything. Here the collection can be the content of a folder in the Packages folder as well as the contents of a sublime-package file (and both of those at the same time, as well).
The logical distinction between the two of them is that a package is a collection of files, both Sublime resource files (like syntaxes, snippets, menu extensions, plugins etc) as well as any other files desired, while plugins are specifically “plugging in” to Sublime to provide additional commands and event based functionality.
For example, it’s possible for a package to contain only a syntax definition for a new language, or a syntax and some snippets to make working with it easier, or even just snippets for a particular purposes. Such a package doesn’t have any plugin’s in it, though.
The API reference talks about the lifecycle of a plugin:
At importing time, plugins may not call any API functions, with the exception of sublime.version(), sublime.platform(), sublime.architecture() and sublime.channel().
If a plugin defines a module level function plugin_loaded(), this will be called when the API is ready to use. Plugins may also define plugin_unloaded(), to get notified just before the plugin is unloaded.
The only types of package resources that can contain a module level function like plugin_loaded() is a .py file, and specifically only one in the root of a package.