Hubitat's drivers are generally closed-source because that is their business model, though they have published several as examples (unfortunately, the Ring Gen 2 keypas is the closest you'll get to this model). Z-Wave devices are generally simple to write drivers for if you are somewhat familiar with:
- Hubitat's development environment -- and if not, this relatively new developer doc may help: Developer Overview | Hubitat Documentation, plus the driver overview; and
- Z-Wave (e.g., command classes), and the Z-Wave driver docs can help you figure out the basics if you are not as well as help you apply general driver knowledge from above to Z-Wave devices.
You determine the capabilities you want to implement based on real-world device features and the commands you need it to accept as well as the attributes you need it to report. ("Capabilities" are just standardized collections of commands and/or attributes, basically so apps can select specific kinds of devices they want to work with without needing to know details about the underlying protocol, etc., just that it can do certain things.) The manufacturer will not help you with this given that it is a Hubitat concept. A Z-Wave manufacturer (or really the manual or conformance doc) generally will help you figure out which Z-Wave command classes the device supports, and that is important when writing a driver and may also help you make decisions about the above.
But I might step back a bit: what are you actually trying to do with this device that isn't working with your custom app? There could be another way that doesn't require a special driver. I'd also look at what you're trying to do with this custom app, as HSM has had a couple additions since it was written and might now be (or perhaps would have always been) able to handle what you're after, some way or another.