>> "1. [...] This then becomes an odd situation as from where I'm sitting someone would have to go into LimeLM and find their original code and put a 1 in the CLF for Module B."
No, you can automate this. Have the customer enter their existing product key into the order form. Then use the limelm.pkey.setDetails function to set the custom license field: http://wyday.com/limelm/help/api/limelm.pkey.setDetails/
>> "2. Taking scenario 1 above and changing it slightly. The customer purchased Module A and then later wants to purchase Module B but wants Module B on a different computer. [...]"
Well, if this is a case you actually deal with, then yes, separate product keys for separate "modules" is the best route. If this is just a hypothetical, or happens so rarely it's not even a blip, then you should handle them like the edge-case they are -- giving them separate poroduct keys, but using custom license fields for "modules".
>> "3. What if they started out with both modules on a single computer and then wanted to split them up at a later date? [...]"
Is this is case that happens a lot? If not, don't worry about it (you can handle cases like that on a case-by-case basis).
>> "Am I missing something here, or overthinking this?"
Yes, it sounds like you're overthinking this. You should automate the "base case". That is, the case that will happen most often. Then, handle "exceptional" cases by hand. Eventually you'll see which "exception cases" are eating up your time and you can automate those too.
You can waste hours and hours thinking of every possible case, but you also have to put it in perspective. Namely, asking yourself how often the exceptional cases will really happen.