Like you said, the cons of loosely coupled code are increased complexity, and it's difficulty to understand. It's usually not immediately apparent what the code does when it's loosely coupled.
Like others have said: The benefit is that it's much easier to swap other pieces of code/modules/objects/components when the pieces aren't dependent on one another.
As with all OO design, there are trade offs you have to make - is it more important for you to have highly modular code that is easy to swap in and out? Or is it more important to have easily understandable code that is simpler? You'll have to decide that.