Hey Gianmaria.
I feel your pain, we've had the exact same issue previously on a device where we used a USB GSM modem....
This happens when the modem disappears (e.g. due to it crashing), and you keeping the inode open while the crash happens, and not releasing it before the modem comes back. (But it's of course difficult to know that you need to release it, since you don't know that it crashed until you get some error result from the kernel when reading or polling). Since ttyACM0 is still active, the Linux kernel will assign it to ttyACM1... and so on. Linux could maybe assign it to ttyACM0 if it kept trying, but it doesn't.
For us the fix when this happens was to just force a reset of the modem again, and then it would come back on ttyACM0. We did experiment a bit with just dynamically scanning through the various ttyACMs, but since pppd depended on ttyACM1 and we didn't want to make a change a bunch of different places, we selected for the force-reset approach.
Best regards,
Arne Christian