Try Facebook. You have to host your game and everything, they just provide the actual playerbase and the social aspect, which are quite valuable. I believe that you still have to code up the leaderboards and all that, and I suggest Node.js + SQLite, it's a nice and robust solution for a simple project.
As for the achievement system, I'm not sure. I am not aware of any currently available HTML5 game engine that can handle these, as they (the achievements) can get quite game specific.
But, thankfully, they're not hard to implement, let me explain how I would do it...
A game can be considered a stream of events. Events, as in "player killed x", and "player gained new level", or "x killed y", you get the point. What you will need to do, to effectively implement achievements, is make an event system for your game.
To realize why, I must first explain what these are, although you probably already know all this because you're using HTML. Others might not, so I'll do it anyway.
An event system is consisted of events and listeners. You can implement listeners as functions that subscribe to certain events: each time an event fires, that function is executed, passing the objects and some other data to it as an argument.
I suggest that you have an EventManager that gets called on each game loop iteration (or less frequently), and holds all the listeners and other information.
If you want to listen to a certain event, you simply do this: eventManager.register("kill", function(killer, victim){...})
.
This is, for example, how you would implement an achievement that requires the player to kill 100 enemies (it's a pretty bad achievement in terms of game design, but it's simple to implement).
var killed = function(killer, victim)
{
if (!(killer instanceof Player)) //Only players can get this achievement.
{
return false;
}
++ killer.n; //This is a Player object, usually, and it keeps track of how many times it has performed this action.
if (killer.n == 100)
{
killer.achievement("100done"); //The player should know how to handle this, no need to hardcode it.
}
}
eventManager.register("kill", killed);
//Later on, when the kill actually happens:
if (enemy.health <= 0)
{
eventManager.fire("kill", [player, enemy]); //Implement this however you wish.
}
You could, of course, hardcode all of this in the actual game logic, but that would be awful and would get really messy. Also, you've built yourself a nice event system that you could use for many other situations too!