There are a number of key differences between Bower and NPM.
NPM is widely used for both front-end and back-end packages. This is partly because NPM was conceived for Node, (the Node Package Manager). NPM has more packages than Bower. NPM also has the ability to enable different versions of dependencies. This seems like it would make things more complicated, but it can be very helpful to avoid "Dependency Hell."