By default audio sessions don't support audio input via a bluetooth headset. It has to be explicitly accounted for in the code (which isn't true for bluetooth audio output).
That probably explains why lots of apps you're trying aren't supporting your headset: the developers haven't considered the edge case. The SpeakHere example code provided by Apple also doesn't support Bluetooth input (nice if it did, right?).
Here's the sample code Apple give in the docs to enable bluetooth input (assuming you already have an audio session):
UInt32 allowBluetoothInput = 1;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
sizeof (allowBluetoothInput),
&allowBluetoothInput
);
Hope that helps!