Главное отличие npm и bower — подход к установке зависимостей пакетов. npm устанавливает зависимости для каждого пакета отдельно, в итоге получается большое дерево пакетов (node_modules/grunt/node_modules/glob/node_modules/…), где может быть несколько версий одного и того же пакета. В клиентском js это недопустимо: нельзя подключить на страницу две версии jQuery или любой другой библиотеки.
тут хорошая статья
UPD: уже и это отличие убрали, получается что нет отличий, но используются оба этих инструмента.