こちらでprivateなコンストラクタがあるクラスをnewする方法について模索しています。
http://qiita.com/mpyw/items/b3d974c073e6484d51a4
が、解決策1~3どれも結局__construct()を呼び出してないじゃない、ということで無理矢理呼び出してみます。
<?php
class HOGE{
	public $value = 0;
	private function __construct(){
		$this->value = 1;
	}
}
function getInstance($class){
	$tmp = <<< HOGEHOGE
	class HOGEHOGE extends $class{
		public function __construct(){
			\$method = new ReflectionMethod('$class', '__construct');
			\$method->setAccessible(true);
			\$method->invoke(\$this);
		}
	}
	
	\$hogehoge = new HOGEHOGE();
HOGEHOGE;
	eval($tmp);
	return $hogehoge;
}
	
	
	$instance = getInstance('HOGE');
	print $instance->value; // 1
実際にできあがるインスタンスはHOGEじゃなくてHOGEHOGEになるけどそこはまあ気にするな。
protectedであればinvokeとか使わず普通にparent::__construct()するだけでいいです。
なおeval()は超危険関数なので、間違ってもこんなことを実環境で行わないように。
まあprivateな__construct()に処理が書いてある時点で異常ですが。
反則ですが、使えるようであればrunkit_method_redefine()が最強でしょう。