If you need a variable pulse width then you need another counter
the starts counting when the first arrives to the delay value.
It's not difficult.
I'm not sure that the initialization of the register works.
Even it if does it's surely a bad design procedure.
With reference to the " Complex event"
always @(negedge start or posedge(Start==StartREF)) //COMPLEX EVENT!!
if you put two counter in sequence, you don't need anythis like that.
Only procedures synchronous with the clock.
Your final assign should look something like:
assign outPulse = (cnt1>delay)&&(cont2<pulsewidth) ? 1'b1 : 1b0;