but my point is, you don't need to check the entire world if you are using a quadtree or rtree or whatever.
They don't need a quadtree or an rtree if the number of objects is fewer than 100.
Also, when using a quadtree/rtree etc with dynamic objects, you'll need to rebalance the tree as objects move around. If the rebalancing is more expensive than the speed gained by using it, then those datastructures can be harmful, not helpful. This is case is relatively rare but something to keep in mind.
This is the basic principle behind raytracing and the variant raymarching, which can be used to create some very interesting images with very compact descriptions:
http://iquilezles.org/www/material/nvscene2008/rwwtt.pdf
Applied to things bouncing around on other things, this technique would enable calculating exactly when the collisions are, which is a possible optimisation to requiring collision checks at each time step. It is very similar to the principle of a discrete event simulator.