There are two kinds of shapes and three ways to make them in Box2D.
A b2CircleShape always has its center at the center of the circle. If you want to make a "lopsided circle" you must fix the circle to another object (e.g. a tiny circle inside it) with a joint.
A b2PolygonShape may be initialized with SetAsBox. SetAsBox by default places the origin in the middle of the rectangle, but you can pass a b2Vec2 as the third argument to place the origin elsewhere.
A non-box b2PolygonShape is initialized with the origin at local coordinates 0,0. To make a shape that extents only one direction, e.g. right and up, simply specify coordinates like (0, 0), (0, 5), (5, 5), (5, 0), constructing the shape only along local coordinates that move up and right (and in CCW winding order).
Remember, the origin of the shape is always local coordinate (0, 0). If you try to think of it as "moving the origin" you are just going to confuse yourself - what you are doing is offsetting the other vertices relative to the origin.