読み辛いと言う事なので書き直してみますか。
 class B {
  public: void Func2(){ Func1(); }
  private: void Func1(){ m_pA->Func1(); }
  private: A*m_pA;
 };
このようなコードにおいて、Func1() の存在意義として
A* が X* に変わった場合に、Func1()で吸収できると
>893は申し上げました。要はこうできると言いたいのでしょう。
 class B {
  public: void Func2(){ Func1(); }
  private: void Func1(){ m_pX->Func3(); }
  private: X* m_pX;
 };
ですが、B::Func1など用意しておかなくても、
↓のよにすれば良いはずです。
 class B {
  public: void Func2(){ Func1(); }
  private: void Func1(){ m_pA->Func1(); }
  private: XA* m_pA;
 };
 class XA {
  public: void Func1(){ m_pX->Func3(); }
  private: X* m_pX;
 };
この方法であればB以外のクラスでもA*を使っていた場合に
XAを使い回せる(他のクラスもA*をXA*に書き換えるだけで済む)はずです。
更にBが外部からAを受け取る形で実装されている場合、
XAをAから派生させて作ればもっと手間が減らせます。