Outros bancos de dados (por exemplo, MS SQL Server) não permitem misturar valores agregados com valores não agregados, apenas porque você obteria o resultado errado.
Portanto, se você quiser valores não agregados do registro onde estava o valor máximo, junte-se à tabela novamente:
select x.user, y.col1, y.col2, x.col3
from (
select user, max(col3) as col3
from table
group by user
) x
inner join table y on y.user = x.user and y.col3 = x.col3
order by x.user