As far as I am aware, there is no way of reusing prepared statements during a connection session (as the PDOStatement object is disposed at the end of the page). In any case, if there was, you would have to be extremely careful to ensure that they were always left in a usable state (e.g. whenever you connect, you always prepare ALL the prepared statements and leave them prepared indefinitely).
Repeatedly running the same query is sometimes useful: What about if you need to do several INSERTs, UPDATEs or DELETEs in the same operation (NB: I know that if you're using a recent client library, you can use batching)?
I realise that looping to emulate a join is inefficient.
There are other reasons for using prepared (or at least parameterised) queries: It makes working with some types of data simpler (e.g. blobs).
Mark