The code is actually in the Neutron entities. On impact with each block - which happens about 5 times a second, given their translational velocity - it checks a few properties. Simplified:
Is reactor machine (done with ID & meta test)? Yes -> call onNeutron(); No:
Is steel block (done with ID & meta test)? Yes -> 80% chance of absorption; No:
Is concrete block (done with ID & meta test)? Yes -> 65% chance of absorption; No:
Is opaque cube? Yes -> Get blast resistance -> chance of absorption; No:
get Light Opacity -> chance of absorption
As for issues with calculations, they are surprisingly light. Of course if you have a runaway reaction that has 10000 neutrons in a reactor, it will lag, but that is from so many entities, not from any code they are running.
Additionally, you never will be able to get that sort of reaction to sustain long enough to pose an issue; the reactor will overheat and melt down first.
Finally, on why I am doing it this way rather than faking it:
I rather suspect that this method is actually calculationally simpler than having a bunch of TEs check their surroundings at any rate fast enough to be convincing.
Additionally, the reactors are being approached using the concept of emergent behavior, rather than hard-coding everything. Like other emergent engines (like Conway's Game of Life, or, one could argue, even Minecraft itself), the results are far more flexible and powerful than anything coded directly.