Universal Messaging Objects (UMOs) are Java objects that perform some processing on the message data received from the inbound router. In most cases, the UMO used by a route is a simple pass through object. A pass through object does not do any processing work. It simply passes the message data to the outbound endpoint.
Simply because the default UMO used by the router is a simple pass through object, it does not meant that you cannot substitute a custom UMO. A custom UMO is a Java object that can be called by the router's core. The UMO must have a method capable of handling the type of data being passed into it from the inbound router or it must implement the org.mule.umo.lifecycle.Callable. If the UMO returns data, the returned data must be consumable by the outbound router. Aside from those restrictions a custom UMO can do any work needed. For example, you could write a component that converts all requests from pounds to euros.