Se puede hacer. Y al menos que yo sepa hay dos formas de hacerlo, usando solo CSS o una combinación de CSS con Javascript (JQuery).
 
Te digo cómo se haría con esta segunda opción. 
Insertamos un elemento <button> dentro de nuestro código, que será visible y será el que lance el cuadro para elegir el archivo:  
 Código HTML:
 <button type="button" class="upload_btn">Elegir imagen</button> 
 La segunda parte, sería la parte del <input>  
 Código HTML:
 <input type="file" name="file_name" class="upload_file invisible" accept="image/*"> 
 CONSIDERACIONES: 1) El atributo accept no es soportado por IE9 y anteriores, y tampoco para Safari 5. 2) He añadido la clase 'invisible' para ocultarlo 
La parte de CSS para ocultar el input es la siguiente:  
Código:
 .invisible{visibility:hidden;height:0;width:0;}
  ¿El por qué no se utiliza 'display:none'? Porque Safari impide acceder a los eventos de un elemento not displayed, por eso tenemos que engañarle un poco 
 
Y ahora, la parte de JQuery:  
 Código HTML:
 <script type="text/javascript">
$(".upload_btn").click(function(event){
     $(".upload_file").click();
     event.preventDefault();
});
//Si quieres hacer submit automático después de elegir el archivo:
$(".upload_file").change(function(event){
    $("#form_id").submit(); // donde form_id es la id de tu formulario
    event.preventDefault();
});
</script>  El uso de event.preventDefault() es necesario para que los eventos que tienen por defecto los elementos no se ejecuten. 
La parte pura de CSS se haría poniendo debajo justo de un <div> que simule un botón el <input type="file">, jugando con las posiciones y la opacidad. De esta manera, cuando se hiciera click en el div, se estaría haciendo click realmente en el input. 
Espero haberte ayudado. 
Saludos.