new T(*p1)とp1.clone()を等価に働くようなメソッドcloneを定義するべきだと言っているんですよね?

例えばnewに限定すれば、

template <class T>
class UP : public std::unique_ptr<T> {
public:
  UP(T* t) : std::unique_ptr<T>(t) { }

  T* clone() {
    return new T(this->operator*());
  }
};

とできるが、std::unique_ptr自体をcloneしていないから名前が悪い。
cloneが意図した以外の場所で使われると(newしてるから)まずい。
よって必要ないし、あってはいけないメンバ関数だと思います。