Classically an engine is something packaged as a library, such as a ".sa", ".so", ".dll", that provides functionality to the software that loads or embeds it. Engines may produce graphics, such as the Python matplotlib or the Objective-C Core Plot. But engines do not in and of themselves generally have standalone user interfaces or "main", they are not applications. Thus, a distinguishing characteristic of an engine is its presentation as an API.
Engines may be used to produce higher level services that are applications, and the application developers or the management may choose to call the service an "engine". As in all definitions, context is critical. In the context of the packaging of software components, "engine" means one thing. In the context of advertising an online service, "engine" may mean something entirely different. In the arena of "core software development", an engine is a software module that might be included in other software by means of a package manager such as NuGet for C#, Pipenv for Python, and Swift Package Manager for the Swift language.
One seeming outlier is a search engine, such as Google Search, because it is a stand-alone service provided to end users. However, for the search provider, the engine is part of a distributed computing system that can encompass many data centers throughout the world. The word "engine" is evolving along with the evolution of computing as it expands into the arena of services offered via the Internet. There is a difference between Google the end-user application and Google the search engine. As an end user, search is done via a user interface, generally a browser, which talks to the "engine". This is but one way of interacting with the engine. Others include a wide range of Google APIs, which are more akin to the classic notion of engine (where an engine module presents via an API, only). There is also an overlapping software evolution, a service/application style known as microservices.
Prior to the Google online search service, there had been multiple search engines that were indeed packaged as software modules. Long before Google, there were online dialup services that used third party search engines, such as Congressional Quarterly's Washington Alert II service. Before that there were many desktop products that included third party search engines, especially CD-ROM based encyclopedias from Grollier, Comptons, Bertelsmann, and many others. Mac OS 9 for a long time used a third party search library (Personal Library Software's CPL). Most of the early search engine companies, such as Personal Library Software and their CPL product, are long gone. One of the earliest Web search services, perhaps the first, was WebCrawler. It was based on the CPL search engine library from Personal Library Software. The CPL engine is long gone, as it was withdrawn from the market when AOL acquired Personal Library Software, and apparently only exists as archival pages in the Internet Archive Wayback Machine.
For a software developer, probably the most useful notion of "engine" is that of a module you can use in your own code, a module that provides significant functionality in a focussed domain. One might call the C standard library an "engine", but it does not really have a focus other than to provide a broad range of low level services. Still, it might be called a "foundational services" engine. On the other hand, Gensim more clearly classifies as an engine; it is a high level package offering a range of high level tools for topic modeling, largely based on derivations of the vector space model of information retrieval originally developed by Gerard Salton.