I think Doom3 still uses BSP. For example for collision detection or automatic portal calculation.
Basically a portal is the conection between two cells or sectors. A portal could be a door, a window, a crack on the wall, etc. There is special portals like mirrors that link a sector with itself but mirrored.
Now, the way Doom3 makes use of the portals for visibility should be like this.
It calculates the sector where the camera (the player) is in. Then for each portal (in the current sector) inside the viewing frustum (or viewing volume), the camera frustum is clipped against that portal so we end up with a new frustum that will be used to for test visibility for the next sector. That operation will be repeated until there is no more portals inside the frustum.
Because I have a lot of problems explaining myself in english, here you have a series of images explaining the process.
First we have the camera (red dot) in sector S1. In blue you can see the frustum. So we check, for that sector, which portals are inside. In that case we have portal S1->S2 inside the camera frustum.
In the next step we clip the camera frustum against the portal S1->S2 so we end up with the following frustum (purple color).
Now we have portal S2->S3 inside the current frustum so we clip that frustum against the S2->S3 portal. The resulting frustum (green color) is:
So now, if we check for more visible portals, we learn that no more portals are inside the current frustum (S3->S4 portal is outside the frustum so S4 is not visible).
So now, what we do is start rendering things. First we render S3 (leaves inside the frustum) and all models that are inside the frustum (green dots) as you can see (grey dots are discarded models).
Now we back to sector S2 and we do the same thing as with sector S3. Render S2 visible leaves and models inside the frustum:
Finally, we back to sector S1 and do exactly the same thing as with sectors S2 and S3:
So at the end we end up with the following image:
As you can see, we end up rendering visible leaves in S1, S2 and S3 and all objects inside the successive frustums I've shown.
This is how (very) basically a portal rendering engine works. I hope that helps you to clarify something your understanding about portals. I did my best!. Hopefully with the time I could improve my english.
Greets.