ちょっとトリッキーな方法。

function f1(&$v)
{
 if(is_array($v)) {
  $v=array_filter($v,'f1');
  return !empty($v);
 }
 return $v%2!=0;
}
$a=array_filter($a,'f1');

まあ再帰呼び出しのために名前付き関数定義は避けられないんじゃないかね。