I need to run a function \"searchBoats(boatType)\" in AngularJS 1.0.7 with a parameter. This parameter is the result of another function parseBoatType 
You can return the resource $promise from the BoatType resource in the parseBoatTime function and use the promise to resolve the parseUrl deferred.
First return a promise from the parseBoatTime function:
return BoatType.getBoatTypeByName({
    name: boatTypeParsed
  }, function success(result) {
    return result;
  }).$promise;
Then resolve the parseUrl deferred with the promise from the BoatType resource:
parseBoatType().then(deferred.resolve);
Bellow is the full code taken from your question with the correction I mentioned.
var parseURL = function() {
  var deferred = $q.defer();
  var promise = deferred.promise;
  promise.then(function success(result) {
    console.log(result);
    searchBoats(result);
  });
  parseBoatType().then(deferred.resolve);
};
parseURL();
var parseBoatType = function() {
  //  Do some stuff        
  // Calculate boatType calling a service that uses resource to call 
  // an API
  // I can convert this callback into a promise but still facing same 
  // issue
  // Code for ngResource@^1.2.0
  /*return BoatType.getBoatTypeByName({
    name: boatTypeParsed
  }, function success(result) {
    return result;
  }).$promise;*/
  // Code for ngResource lower than 1.2.0
  var deferred = $q.defer(), promise = deferred.promise;
  BoatType.getBoatTypeByName({
    name: boatTypeParsed
  }, deferred.resolve, deferred.reject);
  return promise;
  // The service method is called and the code is still running until 
  // the end of the function without waiting for the service result.
  // Then the promise.then code in the parseURL is executed and 
  // searchBoats is run with boatType undefined.                                  
};
// The service with the $resource call to the API
app.factory('BoatType',
  function($resource, SERVER_URL) {
    var boatTypes =
      $resource('http://' + SERVER_URL + '/:action', {
        action: 'boat_types'
      }, {
        query: {
          method: 'GET',
          isArray: true
        },
        getBoatTypeByName: {
          method: 'GET',
          params: {
            action: 'getBoatTypeByName'
          },
          isArray: false
        }
      });
    return boatTypes;
  }
)