Basically, there’s 3 ways to detect trains: IR detectors, visible light detectors and current detectors.
You seem to have ruled out IR detectors because they show. True, but they could be disguised as trackside structures, relay boxes, a pile of ties, bushes, whatever. Advantages: no modification to locos or cars, independent of track power, will detect stopped train. Disadvantages: sometimes difficult to line up emitter and detector, need to have the beam across the track at an angle to avoid dropouts between cars, they stick up beside the track, can detect only the presence of a train, not that the whole block is occupied.
Visible light detectors (photocells). They change state when a train blocks the light from reaching them. Advantages: installed between the rails, so are not very obvious, require only one component as opposed to two for IR detectors. Disadvantages: can release when light reaches them through the gaps between cars unless a delay is built into the circuit, operation may be erratic as the room light changes, don’t work well in dim room light.
Current detectors sense the current drawn by the locomotive. Advantages: will detect a locomotive anywhere in the block, minimal modification to the electrical wiring. Disadvantages: detect only the locomotive–once it leaves the block, the detector thinks the block is unoccupied, even though the rest of the train is still in the block, when the locomotive stops, it thinks the block is unoccupied because there is no longer any current flowing.
The disadvantages of the current detectors can be overcome, however. If you are running lighted passenger cars, they will draw current, thus detecting the rest of the train. You can install metal wheelsets with insulated axles on your cars and attach a very tiny resistor to the axle, connected to the wheels on opposite sides, which will draw current all the time and keep the detector activated. You could also paint a stripe of resistive paint along