Custom hard edges in Blender
You can select any edge you want to be hard and press Ctrl+E and choose 'Mark Sharp'. 

In the example below I have smooth shaded a cube but set the top edge loop to be sharp:



(The result of this is the same as the result from the next technique mentioned, shown in the image below the next few paragraphs)

If you use Autosmooth (as you mentioned) you can leave it like that. If you didn't want to use Autosmooth you could add an Edge Split modifier to handle the smoothing angles.

Below, I have added an Edge Split modifier, unticked the 'Edge Angle' option and ticked the 'Sharp Edges' box:



If you leave the 'Edge Angle' option ticked you can use a combination of the two methods.

As for which formats support sharp edges, according to the 2.69 release notes, both FBX and OBJ formats now support 'Split vertex normals' for exporting sharp edges. The OBJ exporter calls this option 'Smooth Groups'.