The reasons for trains getting delayed are mainly due to two categories.
1. Technical reasons & reasons beyond control 2. Manual reasons
Technical reasons & reasons beyond control of humans:
Signal failure, engine failure, derailment, visibility poor due to bad weather, rains making track soil damp and loose and hence speed restriction, rail fractures and other damages, landslide blocking path, track getting flooded etc.
Crossing of trains on single track routes, cascading effect due to delay of one or more trains, need of giving priority to certain prestige trains and their slight delay makes other trains also run late.
Delay contributed by human actions and omissions.
Driver fatigue, driver and other staff resistance or agitation, lack of responsibility and seriousness of the running staff and other department personnel to facilitate repair and services, passengers' complaint to redress some grievances like filling water, cleaning, food supply etc. and not allowing trains to depart, political agitations and hartal and protests.
The above are just a few reasons which I have read or experienced delays due to. Recently on the return journey from Mumbai, the train was delayed six hours due to engine failure of a train that was before, and the delay got to eight hours at the fag end when there was a speed restriction due to an earlier derailment.