Você está fazendo um INNER JOIN, mas precisa de um OUTER JOIN, em particular, um LEFT JOIN. Com um LEFT JOIN, a tabela "à esquerda" é sempre unida e, se não houver correspondência, os campos da tabela à direita são definidos como nulos. A diferença é explicada muito bem nesta página da Wikipédia .
Então você tem que agrupar as linhas com o mesmo id de envio e contar quantas linhas foram agrupadas, cuidando que se um envio tiver apenas um comentário e outro não tiver nenhum, ambos terão 1 linha agrupada... Se um envio não tiver comentários , na próxima consulta
c.submissionid
será nulo, então Seu SQL pode ser
SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid,
IF(c.submissionid IS NULL, 0, COUNT(*)) AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10
Pode haver erros, não testei a consulta... Mas espero ter te dado a ideia certa, que é a diferença entre junções externas e junções internas.