Great question. It goes to the core of why Bootique even exists. Yes, modules are at the heart of Bootique and allow for some pretty cool functionality. But modules are not a requirement to use a dependency. You already have the keywords in your message to make this distinction - "libraries" and "services". To decide whether you need a module or not, you may apply an informal classification: is it a library or a framework?
Objects from a library can be used as is without any extra configuration. They are relatively cheap to create and hence do not require reuse within the app. So no module is needed. You just use them as is. A framework on the other hand has "services" that are objects of a different kind:
* May require complex configuration
* May require a dynamic strategy to create different subclasses of the same service.
* May be slow/expensive to create / use significant system resources (and hence require reuse)
* May require lifecycle management (explicit startup and shutdown)
Bootique "manages" services, i.e. configures, creates in a certain scope (usually a singleton), makes them injectable into other objects, so once configured they can be reused.
To give an example, JSON serialization would normally fall in the "library" category. While JDBC is a "framework", with connection pool being a reusable injectable service.
There's of course a large grey area in between libraries and frameworks. E.g. ObjectMapper from Jackson (a popular JSON library) can be created on the spot as needed (so Jackson can be treated as a library). But sometimes ObjectMapper requires special configuration, in which case it can be made into an injectable service within a module (Bootique itself happens to have a JacksonService).
Hope this helps to clarify it.
Andrus