Actually, afaik most raylib users use it for 2d games/tools; it has a batching system to minimize draw calls that works very good with sprites (but also used with 3d shapes).
About shaders, raylib provides a Mesh structure with some predefined vertex attribute arrays but you can use them for custom data if required.
Also, you can use the lower-level library rlgl for a more fine grain control over the buffers.