Separate Mirrored mesh when exporting?
I suggest you name your mesh with the suffix .l since it is the left side which is modelled (even if there is a subdivision modifier).

Here are some manual steps.


Duplicate objects. &#8679; ShiftD
With the duplicates selected, mirror them &#9096; CtrlM, X.
Export as fbx but deselect apply modifiers.


Or use a short python script. (Paste this in Blender's text editor and click Run Script with the objects selected. The script will automatically remove the modifiers and create a duplicated mirror, even if the mirror axis isn't x.

If you're using a different naming scheme than .l/.r, change this line 
    new_obj.name = re.sub(r'\.l\.\d\d\d', '.r', new_obj.name).

new_obj.name = re.sub('left', 'right', obj .name) would replace left with right. (You would name everything with the left prefix beforehand (e.g. "leftHand".)

import bpy
import mathutils


for obj in bpy.context.selected_objects:
    # Check if a mirror modifier exists.
    for mod in obj.modifiers:
        if mod.type != "MIRROR":
            continue

        mirror_name = obj.name.replace("Left", "Right")
        if mirror_name == obj.name:
            mirror_name = obj.name + "_mirrored"

        # Reference the mirrored object. Create it if it doesn't exist.
        mirror_obj = bpy.data.objects.get(mirror_name)
        if mirror_obj == None:
            mirror_obj = bpy.data.objects.new(mirror_name, obj.data.copy())
            mirror_obj.name = mirror_name
            bpy.context.scene.objects.link(mirror_obj)
        else:
            mirror_obj.data = obj.data.copy()

        axes = [mod.use_x, mod.use_y, mod.use_z]
        dir = [(1,0,0), (0,1,0), (0,0,1)]
        for axis, direction in zip(axes, dir):
            if axis:
                mirror_obj.data.transform(mathutils.Matrix.Scale(-1, 4, direction))
                mirror_obj.data.flip_normals()

        mod.show_render = mod.show_viewport = False
        break


To remove the duplicates created by the script and re-show the mirror modifier simply undo the actions of the script with a single undo step. &#9096; CtrlZ

For 2.8x, this script can be changed to:

import bpy
import re
import mathutils

scn = bpy.context.scene
objs = bpy.context.selected_objects


for obj in objs:
    new_obj = obj.copy ()
    new_obj.data = obj.data.copy ()
    if len(obj.users_collection):
        obj.users_collection[0].objects.link(new_obj)
    else:
        scn.collection.objects.link(new_obj)
    new_obj.name = re.sub(r'\.l\.\d\d\d', '.r', new_obj.name)

    for m, n in zip (new_obj.modifiers, obj.modifiers):
        if m.type == "MIRROR":
            axes = [m.use_axis[0], m.use_axis[1], m.use_axis[2]]
            dir = [(1,0,0), (0,1,0), (0,0,1)]
            for axis, direction in zip (axes, dir):
                if axis:
                    new_obj.data.transform (mathutils.Matrix.Scale (-1, 4, direction))
                    new_obj.data.flip_normals ()
            obj.modifiers.remove (n)
            new_obj.modifiers.remove (m)



scene.objects is change to collections system
mirror modifier used axis are now accessible as a vector