問題は UINavigationController ではなく、それをモーダルに提示することです。モーダルに提示された ViewController は決して透過的ではありません。
UINavigationControllers ビューをサブビューとしてメインの UIWindow に追加することで、モーダル プレゼンテーションを偽装できます。
この例は、XCode でテストするときに機能します。
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [[UIColor greenColor] colorWithAlphaComponent:0.35];
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:viewController];
[[[[UIApplication sharedApplication] delegate] window] addSubview:navCon.view];
もちろん、アニメーション化されたトランジションは自分で行う必要がありますが、アニメーション ブロックを使用すると簡単です。