Learning multiple languages is my hobby, and in fact I'm about to begin a Master's program in ESL/Applied Linguistics. I already have a degree in behavioral Psychology, and I have experience with (in order of familiarity) German (including Zürich dialect), Latin, Spanish, Dutch, Mandarin, Russian, Modern Greek, Modern Hebrew, Japanese, French, Korean, Italian, and Icelandic.
However, despite all my study, the only one I can speak fluently is German. Why? Because you have to realize how we learn skills. It's not that there are "modules" in the brain that control different abilities that we have; it's not that there's a single "module" for language in general or even particular languages. Rather, you have countless circuits of neurons that rewire based on practical use. (Not just use. Practical use. This is something that connectionist cognitive psychology neglects; but that's another story for another time.)
Let's greatly simplify things for the sake of imagination. Imagine we have exactly six neurons:
(B) controls moving the body other than speech; INPUT: varies; OUTPUT: arms & legs
(E) detects changes in the environment other than speech; INPUT: outside world; OUTPUT: varies
(SS) controls speaking Spanish; INPUT: varies; OUTPUT: mouth and tongue
(SH) controls hearing Spanish; INPUT: ears; OUTPUT: varies
(ES) controls speaking English; INPUT: varies; OUTPUT: mouth and tongue
(EH) controls hearing English; INPUT: ears; OUTPUT: varies
Now the way neurons work is they can accept input basically anywhere on their surface from as many other neurons as you can fit in the space. But they only output in one direction, through a structure called the axon. This means that the neuron can't fire in reverse. If it wants to stimulate the neuron that stimulated it, it has to either route through a third neuron or grow an extra branch on the axon that leads back to the first neuron. So reversibility isn't just automatic. You often have to explicitly train at it.
So now. Imagine all the possible connections between the first group of neurons already exist. You know Spanish. (SH->SS), so that when I hear someone talking in Spanish, I can respond in Spanish. (SH->B), so that when someone says, "Please pass the salt" in Spanish, I can respond with my body and get the salt. (E->SS), so that when I detect something interesting in the environment (which includes my internal environment of things I feel a need for like food and salt), I can tell someone else about it. And of course, (E->B), seeing interesting things in my environment can also cause me to take action with my body; but this is not language, so we're just going to ignore it in this little exercise. Also, note that I can speak Spanish to myself (not necessarily out loud, but quietly in my thoughts) and act on what I hear myself saying, which can produce (SS->SH).
Now, the way most people are taught language in adulthood is by telling them that [Native word] = [Foreign word]. In other words, adults often learn (EH->SS) and (SH->ES). This creates all kinds of problems, because word order is usually different across languages and because words that "equal" each other are often used in different contexts across languages. They also tend to cluster with different words to form different idioms. Moreover, in our example, if I want to make the (EH->B) connection, I have to route through extra neurons (EH->SS->SH->B), which isn't very efficient. Same goes for (E->ES); I have to reroute through (E->SS->SH->ES). If I do it enough, maybe my brain will learn to shorten the circuit and get the two-neuron version. However, that's not likely. Why not?
Remember how I said that language use had to be practical? Well, if it isn't practical, your brain doesn't release the dopamine it needs to strengthen and shorten connections. So if you're fumbling along with a crummy word order, taking extra time to say things while you reroute through all those extra connections, you're going to look stupid to the person you're talking with--not practical. You're not going to get the result you want from the other person, and the connection won't be strengthened. Instead, you're very likely to fall back on the connections that are short and efficient--your native language--if there's somebody available who can understand it.
So to answer your question, it's very possible to understand but not speak. It's also possible (though not as likely) to speak but not understand. The reason why is because neurons are very selective about where they wire, and they don't necessarily wire in reverse, especially when it's not just easier to talk in your native language.