You can remove the marker with this :
directionsDisplay.setOptions( { suppressMarkers: true } );
As you have the direction param "destination" you know where you're going, so you're then totally fine to add another one by yourself :
var latlngDestination = new google.maps.LatLng(???,???) ;
var markerDestination = new google.maps.Marker({
map: map,
position: latlngDestination,
draggable: true,
icon: 'http://www.google.com/mapfiles/markerA.png'
});
directionsService.route({
origin: ???,
destination: latlngDestination ,
travelMode: 'DRIVING'
}
For the snapping part you have the same question and solution here : Snap to nearest street