One idea for anonymous and concurrent interactions/collision handling:
Entities will submit their bounding boxes, and (maybe) actions to take if colliding.
At the end of a frame, check collisions and put active ones into a list/tree.
At the next frame, entities will check themselves on the list and act accordingly.