Question: I noticed that if I don't explicitely enqueue my theme's main stylesheet and jQuery in my functions.php, these are loaded anyway. But perhaps it's better for some reason to enqueue them ? What is the right way of doing it ?

Answer: 
Your real big problem here **is** the use of `query_posts`. It breaks the main query object, and sets the main query object to the query made by `query_posts`. What you are seeing is quite normal. 

Your real solution here with the use of `query_posts` would be is to reset the main query back to what it should be. This is where `wp_reset_query()` comes in. If this is a normal page, `is_search()` will return `false` after `wp_reset_query()` as the main query is reset to the page's main query.

```
query_posts( '&s=crap' );
// Do your loop as normal
wp_reset_query(); // Add this after your loop
var_dump( is_search() ); // Will return bool ( false )

```

Remember, use of `query_posts` is highly discouraged. You should be using `WP_Query`
You can use `global $wp_query` and set the `is_search` to false;

```
global $wp_query;
query_posts(""); //is_search is false now
query_posts("s=kucing"); //is_search is set to true
$wp_query->is_search = false; //is_search is set to false

```