I don't think that it is neccessarily true that DDL statements don't appear in PL/SQL blocks. Where they represent an efficient mechanism for performing some task then you'll see them. For example, truncating a table, or adding or dropping a table partition.

So there are circumstances where DDL is appropriate, it's just that they are not common.