The reasoning for the class was not for multiple instances, but for ease of use..
Perhaps, but the compiler has no way of knowing that you will only make one instance of the class.
There are ways of making a copy of the this pointer in the constructor, and then using that copy in the static method to access the non-static members of the class IF you do only create one instance.
I do that all the time at work, when the class is a dialog class, and I want to use a progress bar dialog class. The progress bar class requires a static method, just like attachInterrupt, for very similar reasons. Each class that uses the progress bar class is a singleton (only one instance at a time), so I register a static method for the progress bar class to call, and in that static method I call the real class member function using the static copy of the pointer to this that the constructor of the singleton made.