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