Using 2) is unfortunately not an option since the plugin needs to be able to run without Calibre and 1) is less than ideal.
I suppose 2) could be easier achieved with branches in the repository and constant merging back and forth...
I think I'll go with option 3) and modify the modules to use relative imports, and import from within the packages like this:
Code:
from packages import bs4
Thank you for the answer though Kovid!