Bullet does support arbitrary meshes; I'm sure Byte56's answer will work but you'll definitely be doing more work than you need to and it'll perform worse than Bullet's built-in solution.
Have a look at the btBvhTriangleMeshShape and btTriangleIndexVertexArray classes; you'll need to load in your obj file to get its vertices and indices, create a btTriangleIndexVertexArray containing those, then create a btBvhTriangleMeshShape from this. That'll give you the collision shape, then it's just a case of attaching that to a rigid body.
Here are Bullet's reference pages for the two classes; there should be enough google fuel in there for you!
http://bulletphysics.com/Bullet/BulletFull/classbtBvhTriangleMeshShape.html
http://bulletphysics.com/Bullet/BulletFull/classbtTriangleIndexVertexArray.html
Bear in mind that Bullet makes it hard to figure out who owns what memory; in this case it expects you to manage both the btTriangleIndexVertexArray you pass into the shape, and the vertex and index arrays you pass to that; it won't take a copy or take ownership of those pointers. So either keep them around as values on the stack or as class members, or make sure to keep hold of the pointers and delete them in the correct order.