Partitioning really is the best way to deal with this; drop/truncate partition makes removing old data simple and fast.
But if this is definitely ruled out...
A filtered table move (added 12.2) may help. This only keeps rows matching the where clause:
create table t as
select level c1 from dual
connect by level <= 100;
select count (*) from t;
COUNT(*)
100
alter table t
move including rows
where c1 > 90;
select count (*) from t;
COUNT(*)
10
We also have a special purge of this table once a quarter, where we create a new table, export data from old table to new table and then recreate indexes on new table.What do you mean by export? Create-table-as-select or something else? If you're doing something else, CTAS should help speed up this process.
Is there any way we can have more data purged on daily/weekly basis?You can run a purge as often as you like - provided you have the resources to do this. It's not clear from what you've said how exactly the purge works. Or what's stopping you from running this more often.
If you share more details on how the process works and what your current system limitations are, we may be able to suggest more options.