OpenGL also can handle at most one index stream.
The obj describes an indexed mesh, where each of the data arrays (positions, texture coordinates and normals) have different indices. D3D, on the other hand, expects only single index array to an interleaved data array (index buffer + 1 vertex buffer). I don't remember whether OpenGL supports different index streams for different vertex elements.
Interleaving is not a strict neccessity (AFAIK also not for the most modern D3D / OpenGL versions). You can have more than a single data stream.
To load the obj to a d3d-compatible format, you need to interleave the data based on the f instructions in order to get a single vertex buffer. The new indices should then be set to point to the resulting interleaved vertex array.
As Nik02 has stated, every vertex in D3D / OpenGL must provide data for each declared vertex attribute. Addressing a vertex can be done only in its entirety due to the single index. This means usually that for each index combination found in the OBJ's f section one needs to assemble a vertex for D3D / OpenGL (i.e. copying the indexed attribute data in a consistent order) and to generate a new index (a counter is just sufficient). If you want a smaller memory footprint, you can investigate whether the OBJ's index combination was already used earlier; if so, you can re-use the formerly made vertex by just push the belonging D3D / OpenGL index into the index buffer (instead of assembling a copy of the same vertex).
So having all this I can't load model properly. I'm searching the web and I can't find correct model with uvs and normals. Or maybe they are correct and it's only my misunderstanding?