Зачем нужны Engines/движки в Rails?
Gem - это упаковка для кода. 
Аналогия: zip-архив, внутри которого могут лежать разные штуки. 
Как правило, внутри gem запаковывают самостоятельный код. Его можно использовать как в своих собственных скриптах, так и в других фреймворках. Не обязательно только в рельсах. 
Просто подключаем гем и пользуемся. 
Rails engine - это тоже ruby-код. Но его главное отличие от остальных библиотек, запакованных в gem (которые в простонароде все называются гемами), заключается в том, что этот код не является самостоятельным. Его нельзя подключить в своём скрипте или в каком-то другом фреймворке. Он будет работать только в рельсах, потому что содержит в себе специфичный для рельс код без намёка на самостоятельность. 
Рассматривайте engine как плагин или фича к рельсам, а не как отдельный продукт.
как уже заметил blackst0ne, гем - это просто способ упаковки/распространения кода.
если по простому: любой енжин (код, конкретно завязанный на рельсы) может быть гемом, но не каждый гем может быть енжином.