I've been writing my own apps for automations, and once you get the basics down there is not much to it. I'm no expert, but I had some Java background and just started fiddling until I figured it out.
Start by looking at the Hubitat documentation on writing your own apps. If you can find code for a sync app between two devices, that will teach you a lot. I found an app that syncs a dimmer to a virtual fan controller when I was learning apps. That taught me how to add a device input, how to subscribe to an attribute in that device, and how to run a method when an event happens from that subscription.
In the app, you can use the runIn(seconds, method) method. It sets a schedule to run the method in how ever many seconds were set whenever it is called. So runIn(300, alarmHandler) would run the alarmHandler method in 5 minutes.
The nice thing about runIn(), the default is to update when you call the same method twice. So every time you call runIn(), it will delete the current schedule to run the method, and create a new one to run in the seconds from current time. So, if the temperature keeps changing, every time it changes it would call runIn() again to update when the alarm method will fire, which is what you are looking for. When no temp update happens, the method will run when the schedule finally fires since it is no longer being pushed out by new temps coming in.
The App would have a preference for one device with the capability of Temperature Sensor, and one device which is your variable. You can make a variable connector to make the variable a device with a variable attribute. When you run the app, you choose the temperature device and the variable device as devices.
In initialize() of the app, you create a subscription to "temperature" for the temp device, to run a method that will call the runIn() method.
subscribe(freezerTemp, "temperature", temperatureHandler)
In the temperatureHandler() method, that runs every temp update from the subscription to the temperature event, you call runIn().
runIn(300, alarmHandler)
In the alarmHandler method, when it finally actually gets called when the timer is no longer getting pushed out, you update the variable device. If you use a string variable, it could get set to ALARM, which is your trigger in some other automations to actually make something alarm. You can call this attribute whatever you want, and that is what your automation will work with. Maybe just call it "alarm" and make it a boolean value for true and false.
You will also need to set some preferences in the app for the time to alarm that will be a variable to use in your runIn() method, like a wait time. runIn(waitTime, alarmHandler).
You will also need a way to reset the alarm. You could do it manually in the variable device, or add a virtual button to the app, subscribe to it, and then when pressed, resets the variable to OK or false.
I probably could have written this app in the time it took to write this 