You can still use programmatic approaches to get the mute switch state, however there's one thing you need to be sure about:
set your AVAudioSession to Ambient! If you set it to Playback for example, that will not care about the mute switch state!
You can simply set the state like this:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
To find some code examples for querying the mute switch state from within your app, you can find working samples here.
I had the same issue as you had when I was using Finch for OpenAL. I just set the soundengine to initiate an Ambient session and now my mute switch works properly:
[soundEngine activateAudioSessionWithCategory:AVAudioSessionCategoryAmbient];