I've never looked at GIMPACT, rumor has it there is some kind of hierarchical representation. I don't know the details.
There're several ways, BSP might not be the best.
You should always utilise mutli-level collision detection, that is, first test against its AABB, then again the primitives or polysoup. The trick for a polysoup is, to subdivide the poly-set into some really compact AABBs with a reasonable number of polys inside. The AABBs could be put into an oct-tree like structures or some other data-structure(sweep'n'prune etc). This way you will have a very fast and constant access to your polysoup (gimpact does something similar ?).
Bullet does indeed what you mean. AABB testing is the so called broadphase, then a narrowphase follows resolving an exact hit using the internal collision shape. The collision shape can be trasformed by a rigid transform. There are a variety of shapes, polysoup being one of them.
As far as I know this will wreak havoc for dynamic objects. I will look again at the documentation but from what I recall, I don't see how callbacks could help me there.
An other way is to utilise callbacks (i.e. when using bullet). My terrain collision detection works only with callbacks, I calculate the mesh (only a hand full of polys per collision object for terrain-object collision) on-the-fly.
As a side note, were never part of the picture. What I meant to say was that BSP leafs were conveted into hulls.