OpenMRS is a flexible, modular, multi-layered system, and one of its strengths is that it can its platform can be used in many different configurations. As a result, "OpenMRS" can mean many things. The minimal version of the system, "OpenMRS Core" (a Java API and relational data model for storing patient-level clinical and programmatic data, and for managing add-on Modules) is not sufficient for real-world applications: key pieces of functionality must be provided by add-on modules.
To implement an OpenMRS system, you typically start from an existing OpenMRS Distribution, and configure that distribution for your implementation use case. Depending on which distribution you choose, and what your use case is, this may range from configuring metadata through a user interface, to writing custom add-on modules, or your own custom user interface backed by OpenMRS REST web services. Implementations with a strong development shops may choose to build their own custom application(s) on top of the Platform.
Here is a list of known OpenMRS Distributions that are intended for use by the general public:
Minimal distro, maintained by the OpenMRS community. You could use this as a RESTful back-end data store, or use it as a web application with the OpenMRS legacy user interface.
OpenMRS Reference Application
Maintained by the OpenMRS community, this distro distrobution demonstrates how the platform's capabilities can be used to build an EMR. You could use this out-of-the-box as a facility EMR, but it (currently) doesn't have the complete EMR feature set.