It's really a matter of perspective. On the one hand, it's creating a situation where a user cannot uninstall the app. On the other hand, it's _allowing_ a user to prevent themselves from being able to uninstall the app under some circumstances. Whether this is ultimately a net increase or decrease in user freedom is an exercise in judgement.
IMO, it's a net decrease, because past owners shouldn't be able to bind future owners. The fact that it's your past self binding your future self, rather than the usual case of the manufacturer binding the end-user, is irrelevant.
But really, this isn't about overruling software, it's about overruling yourself.
Past self has implemented a mandate that future self get up at this time. Future self is a sleepy, lazy, point of sale that can't be trusted.
Sample size of 1. I used to "wake up" and turn off my alarm and have zero recollection of it. I got the most annoying mechanical clock and packed it in a box that I had to unpack before I could turn it off. It got louder as I removed the packaging. The prolonged activity in order to shut off the alarm is ultimately what helped me fully wake up.