Они нужны для:
- Реализации криптографических алгоритмов
- Реализации любых других алгоритмов требующих работу с битами
- Чтобы пользователи языка не изобретали велосипеды
Понимаете, это ведь не особенность языка - это скорее особенность наших процессоров,принципов вычислений, ассемблера. Раз уж эти операции существуют, причем именно в том виде в каком к ним привыкли то логично предположить что многие программы и алгоритмы рассчитывают на их наличие в инструментарии разработчика. Представьте что вам пришлось бы портировать некий криптографический алгоритм использующий эти операторы на js в котором их не было бы. Допустим вы реализуете его умножая/деля на два, но затем обнаруживаете, что при умножении старший бит у вас исчезает, а должен становится самый младшим. Кроме того ваша реализация на js была бы много медленней чем встроенная в язык реализация.