Its because of the "circular" reference, ie, you have a two paths from t3 back  to t1.  Because of this we stop the truncate because there is now a non-deterministic path through the tables.
eg
SQL> create table t1(x number primary key)
  2      partition by hash(x)
  3      ( partition p1 );
Table created.
SQL>
SQL> create table t2(x number primary key, y number not null,
  2         constraint t2_fk foreign key(y)
  3         references t1
  4         on delete cascade)
  5      partition by reference(t2_fk);
Table created.
SQL>
SQL> create table t3(x number primary key, y number not null, z number not null,
  2         constraint t3_fk1 foreign key(y)
  3         references t2
  4         on delete cascade
  5         --,
  6         --constraint t3_fk2 foreign key(z)
  7         --references t1
  8         --on delete cascade
  9         )
 10      partition by reference(t3_fk1);
Table created.
SQL>
SQL> insert into t1 values(1);
1 row created.
SQL> insert into t2 values(1,1);
1 row created.
SQL> insert into t3 values(1,1,1);
1 row created.
SQL> commit;
Commit complete.
SQL>
SQL> alter table t1 truncate partition p1 CASCADE;
Table truncated.
SQL> alter table t2 truncate partition p1 CASCADE;
Table truncated.
SQL>
SQL>