Is there a way to create per-face/per-vertex normals?
It is possible since 2.74 release (see the release notes). Upcoming 2.75 release will include some rather important fixes for them too.

You can only manipulate them in 'Object' mode though (i.e. not in BMesh), and there are several other limitations that may be addressed in future - in a few words, they are mostly procedural currently (through modifiers), and you should only use them on final topology, any topology change (adding/removing verts/edges/faces, or even applying negative scaling) will more or less break them.