It's expected that the JS variables will be reset by a post back, as you are sending the client a new version of the page to render. Since ASP.NET does a good job of tracking the control state, can you just alter your JS to get the current selected value of the DDL rather than sending through the server? E.g. something like
<asp:DropDownList AutoPostBack="true" OnSelectedIndexChanged="dropVehicleRequest_Changed" runat="server" ID="dropVehicleRequest"></asp:DropDownList>
<asp:DropDownList runat="server" ID="dropCallbackReason" SelectedIndexChanged="riskSeverityDropDown_SelectedIndexChanged" onChange="javascript:updateCallBackReason()" ClientIDMode="Static" >
<asp:ListItem Text="-- Select Reason --" Value="1"></asp:ListItem>
<asp:ListItem Text="Booking" Value="2"></asp:ListItem>
<asp:ListItem Text="Discussing" Value="3"></asp:ListItem>
<asp:ListItem Text="Contact" Value="4"></asp:ListItem>
</asp:DropDownList>
<script type="text/javascript">
function updateCallBackReason() {
var ddlReason = document.getElementById("<%=dropCallbackReason.ClientID%>");
callBackReason = ddlReport.options[ddlReason.selectedIndex].text;
return callBackReason;
}
</script>