You could use Smooth and repeat W -> Smooth -> F6 and adjust Smoothing factor and number of Repeats.
Or a small script - at the end of the script all selected faces will have almost identical area. The orientation and shape are preserved.
import bpy
import bmesh
import math
from math import sqrt
obj = bpy.context.edit_object
me = obj.data
bm = bmesh.from_edit_mesh(me)
face_data = []
area_accum = 0.0
for f in bm.faces:
if f.select:
area = f.calc_area()
if area != 0.0: # avoid divide by zero
center = f.calc_center_median_weighted()
face_data.append((f, area, center))
area_accum += area
print(area)
area_average = area_accum / len(face_data)
print("average area is:", area_average)
for f, area, center in face_data:
rescale = sqrt(area_average / area)
for l in f.loops:
v = l.vert
v.co = ((v.co - center) * rescale) + center
bmesh.update_edit_mesh(me, True)
output:
0.009626750834286213
0.01746169477701187
0.020414138212800026
0.009531363844871521
0.012785278260707855
0.016477763652801514
0.010115167126059532
average_area 0.013773165244076933
# if you ran it a second time all areas are as close as they'll get.
0.013773156329989433
0.013773160986602306
0.013773168437182903
0.013773171231150627
0.01377316378057003
0.013773173093795776
0.013773162849247456
(view this image in a new tab to see the difference in area directly displayed on the polygons)

The above script preserves Shape, but uses a rescale factor to homogenize the Area of all selected Faces. If you need to also make all edge lengths the same while preserving Area and Orientation that's possible too.