Perl, 702 613 546 474 439 338 262260 bytes
Thanks to Dom Hastings for his help and his supergolfed version.
The code uses a 2D array since printing backwards and upwards is a pain.
Final versionVersion by Dom Hastings:
$x=$y=$a=$b=99;map{/^./;$a=($c=$x)<$a?$x:$a,$A=$x>$A?$x:$A,$b=($C=$y)<$b?$y:$b,$B=$y>$B?$y:$B,$q[$c][$C]={split'','W<E>N^Sv'}->{$&},$x+={W,-1,E,1}->{$&},$y+={N,-1,S,1}->{$&}for 1..$'}split',',pop;$q[$c][$C]=X;mappop;$q[$c][$C]=X;for$y($b..$B){$y=$_;print$q[$_][$y]||$"for$aprint$q[$_][$y]||$"for$a..$A;print$/}$b..$B
My lesser golfed version of 338 bytes (for reference):
@m=split(',',pop);$x=$y=$a=$b=99;map{($d,$s)=/^(.)(.+)$/;for(1..$s){$c=$x;$C=$y;if($x<$a){$a=$x}if($x>$A){$A=$x}if($y<$b){$b=$y}if($y>$B){$B=$y}if($d eq"W"){$r="<";$x--}if($d eq"E"){$r=">";$x++}if($d eq"N"){$r="^";$y--}if($d eq"S"){$r=v;$y++}$q[$c][$C]=$r}}@m;$q[$c][$C]=X;for$y($b..$B){for$x($a..$A){$t=$q[$x][$y];print$t?$t:$"}print$/}
Test
$ perl piratemap_golf.pl E4,N3,W6,S10,W1,S1,E5,N1,W2,N6,E6,N5,W10,S1,E2
v<<<<<<<<<<
>Xv<<<<<< ^
v ^ ^
v ^ ^
v >>>>^ ^
v >>>>>>^
v ^
v ^
v ^
v ^
v ^
v< ^<<
>>>>>^