Silex incluye un atajo útil llamado json() para aquellos controladores que solamente devuelven datos JSON. Pasa a este método los datos que quieras enviar como respuesta y el se encarga automáticamente de añadir las cabeceras adecuadas para una respuesta de tipo JSON:

$app->get('/users/{id}', function ($id) use ($app) {
    $user = getUser($id);

    if (!$user) {
        $error = array('message' => 'No se ha encontrado al usuario.');

        return $app->json($error, 404);
    }

    return $app->json($user);
});