One way I like to think of application contexts in frameworks like Spring is as a huge product type with one "field" for each managed component. Objects have views of particular sections of this product, namely, their own dependencies. Viewing the full product would increase coupling.
Seen in this light, the van Laarhoven Free Monad seems closer to how application contexts work that the typical "free monad" type used in functional programming.
Because it's polymorphic over the underlying monad ("forall m. Monad m => ops m -> m a") I believe it lets you express the idea of "pure component whose effects are carried out only through its own dependencies". For example, injecting java.time.Clock in your program logic instead of calling LocalTime.now().