The exact tools that you're using will dictate the precise process, but the general idea is that you should be using three distinct code bases, not two. One is at the top of the hierarchy, which we'll call Core, which contains the central logic for the other two code bases, Eastern and Western. Any changes to Core should be synchronized to Eastern and Western, while changes to just Eastern or Western would not be synchronized back to Core. Core does not actually represent a necessarily "functional" version of your code base, but simply a template for the other two code bases to get updates from. The Eastern and Western code bases should refer to two separate managed packages as a matter of simplicity.
There's going to be downsides any way you look at it, but having three code bases is going to introduce a minimum number of headaches for developers, and having just one managed package for Eastern and one for Western is going to minimize the number of headaches for clients, except for the precious few that may decide they installed the wrong version for whatever reason. It would be theoretically possible to build a set of three managed packages, where a client would first install Core followed by either Eastern or Western, but it's rather difficult for developers to work with, and requires extra steps from clients to install.