CASE plus WAIT statements
Well ...I finally found the issue.

For those who could also wonder why this isn't working, in fact you just need a WAIT statement at the end of the process (outside the CASE statement).

The thing is, when start goes high, state is actually updated and take its new value: S1. Yet, since I'm not using any sensitivity list, the process is running indefinitely and at the same time that state is updated, the process comes back into S0 waiting for another start signal ...

That's why you just need this at the end:

    ...
    END CASE
WAIT FOR time_value;
END PROCESS;