The short answer is that as soon as you use a simple variable, you have lost. Because when you use (whatever value can be):
var = value
you do not try to change the object that var
previouly refered to, but just make var
point to a different object. So any other variables that pointed to the original object are not affected.
So you will have to use an attribute on a mutable object (here the module), or an element of a container. That way, the object itself will the changed and all variables pointing to that object will reflect the change. Of course if at any point of your program you have a simple variable pointing to the attribute, this one will not reflect the change.
So this would be ok:
from proj.B import change_var # change_var will not change: we directly import it
import B
print(B.b_var) # but we use b_var (expected to change) through another object
change_var()
print(B.b_var)